【问题标题】:Concurrency, Atomicty, and Isolation in Entity Framework实体框架中的并发性、原子性和隔离性
【发布时间】:2012-12-27 20:52:48
【问题描述】:

根据一些定期和同时传入的数据,我正在执行一个操作,该操作将向表中插入新行,或更新同一个表中的现有行。是否插入或更新行取决于现有行的状态。因此,该操作的结果将受到该操作之前运行的影响,并影响后续运行。我需要使用事务、锁或其他东西来确保原子性/隔离性。 Entity Framework 似乎有很多选择和注意事项(而且我也是一个完全了解数据库的新手),我不知道我应该朝哪个方向发展。 TransactionScope、BeginTransaction、环境事务?可序列化或可重复读取? SaveChanges 和 AcceptAllChanges?我什至需要做一些特别的事情吗?可以添加新行的事实让我特别担心幻影行,尽管我几乎不明白这意味着什么。任何有关该主题的指导将不胜感激。

【问题讨论】:

    标签: entity-framework concurrency transactions ef-code-first isolation-level


    【解决方案1】:

    本教程可能对您有所帮助 - http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/handling-concurrency-with-the-entity-framework-in-an-asp-net-mvc-application

    引用:

    悲观并发(锁定)

    如果您的应用确实需要防止意外数据丢失 在并发场景中,一种方法是使用数据库锁。 这称为悲观并发。例如,在您阅读之前 来自数据库的行,您请求锁定以进行只读或更新 使用权。如果您锁定一行以进行更新访问,则不会有其他用户 允许锁定该行以进行只读或更新访问,因为 他们将获得一份正在更改的数据副本。 如果您锁定一行以进行只读访问,其他人也可以将其锁定为 只读访问,但不用于更新。管理锁有一些 缺点。编程可能很复杂。它需要显着 数据库管理资源,可能会导致性能问题 随着应用程序用户数量的增加(也就是说,它 不能很好地扩展)。由于这些原因,并不是所有的数据库管理 系统支持悲观并发。实体框架提供 没有对它的内置支持,并且本教程不会向您展示如何 实现它。

    乐观并发

    悲观并发的替代方案是乐观并发。 乐观并发意味着允许并发冲突发生, 然后在他们这样做时做出适当的反应。例如,John 运行 部门编辑页面,更改英语的预算金额 部门从 $350,000.00 到 $100,000.00。 (约翰管理一个 竞争部门并想为自己腾出资金 部门。)*

    教程中的两个模型都有代码示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 2013-08-13
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 2022-01-03
      相关资源
      最近更新 更多