Платформа сущностей использует свойства навигации для вновь созданной сущности - PullRequest
1 голос
/ 01 ноября 2011

У моей компании есть метод, который создает сообщение MailMessage из электронной почты. Метод, который я использую, получает объект Email в качестве параметра, который является простым объектом POCO, свойства внешнего ключа, такие как ToId и FromId, уже установлены для него. Сущность также имеет свойства навигации к сущностям EmailAddress (FromEmailAddress и ToEmailAddress).

То, чего я хочу добиться, это использовать эти свойства навигации. Вот как я смог это сделать, но это выглядит так:

    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 Ответ

1 голос
/ 01 ноября 2011

На мой взгляд, это хорошее решение для отложенной загрузки. Альтернативой может быть явная загрузка свойств навигации. Тогда вам не нужно создавать прокси:

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();

    //...
}

Создает два обращения к базе данных - то же самое, когда вы используете отложенную загрузку и доступ к свойствам навигации.

...