Entity Framework6如何处理ASP.NET MVC应用程序中一对多关系的乐观并发?我很难确定哪个EF应该能够自己处理,而不是我必须手动处理。我在web应用中找到的几乎所有关于EF并发检查的文章都只处理RowVersion列或时间戳列被用作并发字段的简单情况;它们似乎没有提到关系并发检查。
我将简要地解释一下,因为我假设这对能够回答这个问题的人来说并不是什么新鲜事。由于这是一个web应用程序,因此我在每次从服务器往返时都会处理实体框架状态。在更新表上的列的简单情况下,我必须将用于乐观并发(例如RowVersion)的字段值保存到HTML页面上,然后在提交页面时将它们发送回服务器。在提交页面时,我使用EF检索当前数据库记录,用来自HTML页面的并发值更新它,将EF DbEntityEntry对象的状态设置为EntityState.Unchanged,然后将页面中的其他值设置为EF记录。然后,EF可以在调用SaveChanges()时执行自己的并发检查。那么,对于这种模式,一对多关系应该如何工作呢?
这里有一个具体的(尽管是人为的)示例。假设我有一个一张专辑对应多首歌曲的模型。User1和User2都通过更新歌曲来同时开始修改同一张专辑。User1添加了一首歌,User2删除了一首歌。我应该怎么做才能让EF在User2删除一首歌之前自动检测到User1添加了一首歌(反之亦然)?或者我必须手动检测歌曲列表是否已更改?一种可能的方法是在添加或删除歌曲时更新专辑上的SongModifiedVersion列,并让EF使用SongModifiedVersion作为并发字段,类似于Entity Framework Concurrency with Multiple Tables/Entities中的建议。还有别的办法吗?
谢谢,比尔
发布于 2018-05-11 23:20:05
我通常依靠我的DB事务和隔离级别支持来处理并发,而不是手动处理。在这种情况下,我会检查您的数据库的隔离级别最适合您的业务并发需求/模型。
我自己也从来不会直接手动更改EntityState,而是依赖EF来跟踪更改。
https://stackoverflow.com/questions/50259421
复制相似问题