【问题标题】:why does entity framework seem to update unchanged entities为什么实体框架似乎会更新未更改的实体
【发布时间】:2016-09-23 11:43:16
【问题描述】:

尽管已经找到解决方案,但仍将其发布在这里,以便人们在遇到相同问题时可以找到它。

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

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

我试图找到诸如“为什么导航属性设置为已修改”、“为什么未更改的子实体也要更新”等问题的答案。

【问题讨论】:

  • 只有当它在上下文中跟踪的实体设置为 EntityState.Modified 时,EF 才会更新,也许包括您用于保存/更新的代码会阐明您的问题?

标签: entity-framework


【解决方案1】:

彻底的调试表明,实际原因是我在同一个控制器操作中的不同点使用类 - 例如,我可能想通过电子邮件发送有关订单的通知,所以我打电话一个带有 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) 函数时,框架也尝试将其写入数据库。

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

【讨论】:

    猜你喜欢
    • 2023-01-24
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多