2011-11-01 1 views
1

내 비즈니스에는 전자 메일에서 MailMessage를 만드는 방법이 있습니다. 내가 사용하는 방법은 간단한 POCO 개체 인 매개 변수로 Email 개체를 가져오고 ToId 및 FromId와 같은 외래 키 속성이 이미 설정되어 있습니다. 엔티티는 또한 EmailAddress 엔티티 (FromEmailAddress 및 ToEmailAddress)에 대한 탐색 특성을가집니다.엔티티 프레임 워크는 새로 생성 된 엔티티에서 탐색 속성을 사용합니다.

내가 원하는 것은 이러한 탐색 속성을 사용하는 것입니다. 내가 할 수 있었던 방법은 다음과 같다. 그러나 그것은 hax처럼 보인다 :

public MailMessage CreateEmail(Email email) 
    { 
     var tmpEmail = db.Set<Email>().Create(); 
     db.Emails.Add(tmpEmail); 
     db.Entry<Email>(tmpEmail).CurrentValues.SetValues(email); 
     db.SaveChanges(); 
     email = tmpEmail; 

그리고 나서 나는 나의 코드에서 이메일을 사용한다. 이 방법은 엔티티에 프록시가 있으므로 탐색 속성을 사용할 수 있습니다. 이 작업을 수행하는 간단한 방법이 있습니까?

+1

탐색 속성을 사용하려면 엔티티를 컨텍스트에 첨부해야합니다. 따라서 코드를 조금 다르게 작성할 수 있지만 목표를 달성하기 위해 동일한 작업을 수행합니다. – Svarog

+0

나는 그걸 시도해 봤지만 db.Emails.Attach (전자 메일) 탐색 속성을 사용할 수 없다. – norbip

답변

1

제 생각에는 지연로드를 사용하는 것이 좋습니다. 다른 방법으로 탐색 속성을 명시 적으로로드하는 것입니다. 그럼 당신은 프록시를 만들 필요가 없습니다 : 그것은 데이터베이스에 두 개의 왕복을 생성

public MailMessage CreateEmail(Email email) 
{ 
    db.Emails.Add(email); 
    db.SaveChanges(); 

    db.Entry(email).Reference(e => e.FromEmailAddress).Load(); 
    db.Entry(email).Reference(e => e.ToEmailAddress).Load(); 

    //... 
} 

- 같은 당신이 탐색 속성을 지연로드를 사용하여 액세스 할 때.

+0

이 대안은 좀 더 깨끗 해 보입니다. 감사합니다. :) – norbip

관련 문제