实体框架对新创建的实体使用导航属性
本文关键字:实体 属性 导航 创建 框架 新创建 | 更新日期: 2023-09-27 18:13:27
我的企业有一个从电子邮件创建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;
然后我在代码中使用电子邮件。这样,实体现在有了一个代理,所以我可以使用导航属性。有更简单的方法吗?
在我看来,启用延迟加载是一个很好的解决方案。另一种方法是显式加载导航属性。那么你就不需要创建代理了:
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();
//...
}
它创建两次到数据库的往返—当您使用延迟加载和访问导航属性时也是如此。