【问题标题】:How to set-up EF to not to let saveChanges if the previously loaded entity is modified on the Db?如果在 Db 上修改了先前加载的实体,如何将 EF 设置为不让 saveChanges?
【发布时间】:2013-12-15 09:05:14
【问题描述】:
  1. 我通过 EF 加载一个实体
  2. 我在代码中遇到了断点
  3. 并通过数据库上的 SQL Server Management Studio 修改加载的实体
  4. 我按 F5 并调用 base.SaveChanges()

我的期望是 EF 会抛出异常,因为 Db 上的实体与加载时加载的实体不同。

问题: 我应该怎么做,以便在保存更改时,EF 会检查实体上未修改的属性在 Db 中是否不同,以便通过引发异常来防止保存?

【问题讨论】:

    标签: c# .net sql-server-2008 entity-framework entity-framework-4.1


    【解决方案1】:

    您需要的是并发检查。

    在实体框架中,每个实体属性都有一个Concurrency Mode。如果将此模式更改为Fixed,则更新数据时将检查该实体属性。

    您可以做的一件事是添加一个Timestamp 属性,将其并发模式设置为Fixed,然后在SQL Server 中创建一个TRIGGER,以便每次更新Timestamp 字段记录已更新。

    然后您不需要将任何其他实体属性的并发模式设置为固定,因为数据库记录中的任何更改(无论是通过实体框架保存还是任何其他方式)都会导致Timestamp被更新并且在实体框架中之后的任何Save 操作都将检查该Timestamp 的值。这种机制称为乐观并发。

    【讨论】:

      【解决方案2】:

      您对Refresh Method. 感兴趣也可以看看Save changes and Managing concurrency。您可能会发现它很有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-28
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-08
        相关资源
        最近更新 更多