为什么实体框架似乎更新未更改的实体

时间:2016-09-23 11:43:16

标签: entity-framework

尽管已经找到解决方案,但在此处发布此消息,以便人们可以在任何人遇到相同问题时找到它。

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

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

我试图找到问题的答案,例如"为什么导航属性设置为已修改","为什么未更改的子实体也会更新"等等。

1 个答案:

答案 0 :(得分:0)

彻底的调试显示,实际的原因是我在同一控制器操作中的不同点使用类 - 例如,我想通过电子邮件发送有关订单的通知,所以我' m使用DTO(数据传输对象)调用Mail操作,为其提供邮件的相关信息,看起来有点像这样:

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

由于实际的客户实体拥有Mail不需要的大量信息,因此我创建了一个新的Customer对象,其中只包含要放入该DTO的相关信息。这就是问题所在 - 框架正在跟踪新的客户实体,因此当我调用savechanges(async)函数时,框架也尝试将其写入数据库。

希望这可以帮助别人不浪费时间在所有错误的地方寻找错误;)