asp.net mvc-EF6 MVC5为什么LINQ试图更新没有虚拟链接的子实体



我刚刚使用代码优先的方法将我们的项目从MVC4和EF5更新为MVC5和EF6,我遇到了一个我不记得在旧版本中发生过的潜在问题。在更新单个实体时,我收到一个db错误,它抱怨子实体中的属性无效。我检查了模型,并且该子实体没有设置虚拟属性。所以我想知道EF为什么要尝试更新孩子的信息?

这是我正在更新的模型:

public class Subscriber
{
    [Required]
    [Display(Name = "Subscriber ID")]
    public int SubscriberId { get; set; }
    public virtual List<UserProfile> Users { get; set; }
    public List<Website> Websites { get; set; }
}

网站属性是我所指的属性。

这是行动代码:

Subscriber subscriber = db.Subscribers
                           .Include(s => s.Websites.Select(w => w.DomainNames))
                           .Single(s => s.SubscriberId == FormSubscriberID);
subscriber.InjectFrom(viewModel, subscriber); //sets the values from the viewModel
db.Entry(subscriber).State = EntityState.Modified;
db.SaveChanges();

我通常不会在查询中使用include语法——我倾向于使用更详细的"from"语法。作为测试,我删除了includes,一切都很好。

使用".Include"语法可能与我看到的行为有关,或者EF真的在尝试自动更新子实体吗?

EF将假定实体上的所有集合/复杂类型都是导航属性。Virtual不需要映射导航属性,它只允许延迟加载该导航属性。

如果要将复杂类型/集合排除为nav属性,请使用[NotMapped]属性或.Ignore(t => t.PropertyName)建模器lambda

相关内容

  • 没有找到相关文章

最新更新