asp.net - 在 Entity Framework 中删除对象时的并发性

标签 asp.net entity-framework entity-framework-4 concurrency optimistic-concurrency

我正在使用 Entity Framework 开发一个网络应用程序。我加载一个对象列表并将其绑定(bind)到中继器以显示所有项目的摘要。用户可以点击转发器中每个项目的编辑图标或删除图标。

示例:

项目 1 |编辑|删除

项目 2 |编辑|删除

...

使用 rowversion 列进行并发时编辑工作正常,因为记录已加载,并且 ID 和 rowversion 列的值保留在隐藏表单字段中。这些“原始”值可供稍后在更新时使用。

但是,如果用户单击记录的“删除”,我会从数据库加载该对象,调用DeleteObject(),然后调用SaveChanges()。这样做的问题是,当我加载记录时,它会获取最新的 rowversion 值,因此任何并发检查都变得毫无用处。

如何确保删除记录时进行并发检查?

最佳答案

实际上,如果您想删除该对象,则不必从数据库加载该对象。

相反,创建一个ObjectContext,通过 Attach()、DeleteObject() 和 SaveChanges() 将 ObjectToDelete 附加到该上下文。 因此,您将能够收到有关并发的异常。

关于asp.net - 在 Entity Framework 中删除对象时的并发性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6697459/

相关文章:

Asp.net DetailsView - 多列?

c# - 使用可编辑网格的 Lightswitch,它使用 View 作为数据源

c# - EF6 在单次调用中获取计数

sql-server - Entity Framework 迁移 - 更改属性数据类型

javascript - 如何检测回发是否源自特定 div 外部(客户端)

asp.net - 无法将 HttpHandler 映射到 "path/*"通配符映射

asp.net - 在 Visual Studio 中手动安装 Bootstrap

visual-studio-2012 - 为什么我在 edmx 中达到了 79 个表的硬限制?

c# - 通用存储库模式有重复的代码,那么有什么好处呢?

c# - Entity Framework 4 - ObjectContext.Refresh() 应该如何工作?