2016-09-23 105 views
0

尽管已经找到了解决方案,但在这里发布,因此如果任何人有同样的问题,人们可以找到它。为什么实体框架似乎更新了不变的实体

实体框架似乎更新只通过导航属性链接到实际更改的实体的属性,这让我很困惑。

一个类似的例子澄清:让我们来订购3公斤的糖。该订单有一个ID,一个金额,一个产品ID以及一个虚拟产品(糖),还有一个客户ID可以让它成为一个虚拟客户。在保存订单的同时,客户和产品也在数据库中得到更新。

我在试图找到像“为什么导航属性设置为已修改”,“为什么不更新的子实体更新太多”等问题的答案。

+0

EF只会更新时,它在上下文跟踪实体设置为'EntityState.Modified',可能包括您用于保存/更新的代码将会解决您的问题? – Wurd

回答

0

彻底的调试表明,实际的原因是我在同一个控制器动作中的不同点上使用类 - 例如,我很想发送关于通过电子邮件发送订单的通知,所以我调用带有DTO(数据传输对象)发出的邮件的相关信息,有些看起来像这样一个邮件动作:

public class MailDTO { 
    public Order order { get; set; } 
    public Customer customer { get; set; } 
    public Product product { get; set; } 
} 

由于实际的客户实体有大量的信息,该邮件并不需要,我创建了一个新的Customer对象,并将相关信息放入该DTO中。这就是问题所在 - 客户实体正在被框架跟踪,所以当我调用savechanges(异步)函数时,框架也试图将其写入数据库。

希望这有助于别人不要浪费时间寻找在错误的地方错误;)