我的公司有一种方法可以通过电子邮件创建MailMessage。我使用的方法获取一个Email对象作为参数,这是一个简单的POCO对象,已经设置了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;
然后我在我的代码中使用该电子邮件。这样实体现在有一个代理,所以我可以使用导航属性。有没有更简单的方法呢?
答案 0 :(得分: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();
//...
}
它创建了两个到数据库的往返 - 当您使用延迟加载并访问导航属性时相同。