【问题标题】:Does EF4 always generate an update statement for all related entities, even when only one entity actually changed?EF4 是否总是为所有相关实体生成更新语句,即使只有一个实体实际发生更改?
【发布时间】:2012-02-18 00:00:20
【问题描述】:

.NET 4、EF 4

我有两个相关的实体,Order 和 OrderLine。 Order 包含(引用)OrderLine。

Public Class Order

    Public Property OrderLine

End Class

数据库中的每个实体都有一个表(订单表、订单行表)。每张表都有一个时间戳列,EF4模型为每列的时间戳表设置了ConcurrencyMode = Fixed。

我对 Order 进行了更改,但保持 OrderLine 不变。当我调用 SaveChanges 时,EF4 似乎为 OrderLine 生成了一个更新查询,即使它没有任何更改。最终结果是 OrderLine 的时间戳被数据库更新以响应 EF4 更新命令,但没有更新其他内容,因为 OrderLine 上没有任何更改。

这是 EF4 应该处理的方式吗?如果是,为什么?

【问题讨论】:

    标签: .net entity-framework entity-framework-4


    【解决方案1】:

    This is a known bug in EF4,您可以尝试联系 MS 获取修补程序。您可以在保存、保存之前分离未修改的实体,然后重新附加实体作为解决方法。据我所知,它在 .NET Framework 4.5 的开发人员预览版中似乎已修复,但未获得生产使用许可。

    【讨论】:

    • @Casey 在不预先向 MS 支付费用并希望得到退款的情况下,我无法找到一种方法来请求修补程序,因此我选择使用该解决方法并等待 .NET 4.5。跨度>
    • @Casey 但我相当肯定它会起作用,因为该错误似乎确实在公共预览版本中得到了修复。
    • 谢谢。您在 context.savechanges 方法中执行分离/保存/重新附加?
    • @Casey 是的,我的 SaveChanges 调用 GetObjectStateEntries(EntityState.Unchanged),将所有这些实体保存在 EF 不知道的单独列表中,将它们全部分离,调用继承的 SaveChanges 方法,最后重新附加所有这些实体.请注意,这种分离和重新连接可能会触发事件(主要是Entity{Reference,Collection}.AssociationChanged);您必须确保它们不会给您带来问题。
    • 知道了。只是为了确保,我认为 EF 4.1 不包含修复?
    猜你喜欢
    • 2011-12-22
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多