0

저는 EF5 Model First를 사용하고 있습니다. EDM에서 자동 생성 클래스가 실제로 무엇인지 이해하지 못합니다. 일부 문서에 따르면이 클래스는 POCO이지만 컨텍스트에서 사용되는 이유는 무엇입니까? Student 엔티티가 있다고 가정하면 내 컨텍스트에서 Student POCO 클래스와 DbSet StudentSet 속성을 얻습니다. 다음 지침에 따라 데이터베이스에 POCO가 삽입됩니까?엔티티 프레임 워크가있는 DTO/POCO

그래서 EF는 POCO를 사용하여 데이터를 전송합니까? 사실 나는 POCO가 엔티티 또는 DTO와 데이터를 교환 할 때와 엔티티가 데이터베이스에 데이터를 넣을 때 단계를 놓칩니다.

+0

네가 시도한 것은 무엇입니까? 예, 코드에서 JohnDoe를 데이터베이스에 넣습니다. DTO에서 데이터를 전달하는 경우 DTO의 등록 정보를 기반으로 POCO를 설정해야합니다. –

답변

1

EDM에서 생성 된 클래스는 ORM/Persistence 클래스입니다. 이 클래스를 사용하여 데이터베이스를 쿼리/변경합니다. 데이터베이스를 변경할 때 모든 DTO 오브젝트를 POCO 오브젝트로 변환해야합니다.

ORM은 응용 프로그램에서 데이터베이스에 레코드를 삽입하기 위해 insert into 구문을 처리하는 대신 StudentSet.Add을 사용하여 새 데이터를 추가합니다. johndoe 정보는 SQL 구문으로 변환되며, EF는 쿼리로 변환 할 때 각 속성을 각 열에 매핑합니다.

Add 메서드는 johndoe 정보를 메모리에 Added으로 저장하지만 바로 데이터베이스에 실행되지 않습니다. 다른 Add 방법이있는 경우 Added으로 표시됩니다. SaveChanges에 전화하는 순간 모든 변경 사항은 생성 된 쿼리를 전송하여 데이터베이스에 저장됩니다.

DTO와 EF 엔터티 간의 매핑은 johndoe을 추가하기 전에 발생합니다. UI에 사용되는 또 다른 DTO 클래스가있을 수 있습니다. 수동으로 맵핑하거나 매퍼 라이브러리를 사용하여 DTO 오브젝트에서 POCO 오브젝트를 작성해야합니다. 예를 들면 다음과 같습니다.

// studentDto as parameter 

var johndoe = new Student 
{ 
    Name = studentDto.StudentName, 
    Age = studentDto.StudentAge 
}; 
MyContext.StudentSet.Add(johndoe); 

// studentDto might have another information as well 
var johndoeSubject = new Subject 
{ 
    Name = studentDto.SubjectName, 
    Years = studentDto.SubjectYears 
}; 
MyContext.SubjectSet.Add(johndoeSubject); 

MyContext.SaveChanges(); 
+0

감사합니다 율리암,하지만 왜 당신이 컨텍스트에 StudentDto가 아닌 Student를 추가합니까? – Llm

+0

@Llm, 데이터베이스의 Student 테이블이 StudentDto 클래스가 아닌 Student 클래스에 매핑되기 때문에 xml 편집기를 사용하여 EDMX 파일을 열고 EF, CSDL, SSDL 및 MSL에서 사용하는 매핑 구성을 볼 수 있습니다. –

+0

Ok I 지금 사세요. 그래서 DTO를 사용하여 데이터를 내보기로 전달해야합니까? 실제로 나는 내가 EF에서 얻은 것 사이에 레이어를 추가하는 방법을 찾고 있었고 보안을 추가하기 위해 내 견해에 전달하는 내용을 검색했습니다. – Llm