实体框架6代码优先并发

时间:2014-05-02 05:57:57

标签: c# ef-code-first entity-framework-6

我正在考虑将Entity Framework 6用于新项目。

当我们开发表时,我们添加一个int类型的更新计数器,当执行更新时,我们检查它是否没有更改并在成功更新时增加它。

根据我的阅读,我可以通过向更新计数器属性添加ConcurrencyCheck属性来进行检查,但是如何在成功更新时执行增量?

或者我应该只使用Rowversion列吗?

1 个答案:

答案 0 :(得分:3)

This Microsoft blog post包含许多EF6和MVC指南的链接。特别值得一提的是 - Handling Concurrency with the Entity Framework 6。该指南使用的是ASP.Net MVC项目,但数据库原则应适用于几乎任何类型的项目。

简而言之,如果您使用ConcurrencyCheck属性,那么您不必自己更新任何计数器 - 但它会为您的应用程序的数据库操作增加更多开销,因为它在引擎盖下EF将推断每个SQL查询,以包括已应用ConcurrencyCheck属性的属性的并发检查。如果您有一个非常大的表(许多列),这可能会导致应用程序性能降低。

更好的方法是在代码优先类的字节数组属性上使用TimeStamp属性(或者如果您使用的是Fluent API,则在属性上设置IsConcurrencyToken())。然后,如果存在并发冲突,EF会抛出一个DbUpdateConcurrencyException - 它取决于你,然后抓住它并相应地处理它。