我正在使用 ASP.NET 为一家零售公司构建应用程序。我使用实体框架(模型优先)作为我的数据访问层。我正在使用存储过程来执行我的 CRUD 操作,并且所有列都已映射,并且似乎是正确的,因为所有 CRUD 功能都按预期工作。
但是我遇到了 DELETE 操作的并发问题。
我在表中添加了一个TimeStamp
列,我正在对其进行 CRUD 操作。UPDATE 操作工作正常,因为它通过主键和TimeStamp
值进行更新。因此,如果没有行受到 UPDATE 操作的影响,由于TimeStamp
值的变化,实体框架会抛出一个OptimisticConcurrencyException
.
该DELETE
操作的工作原理与按主键和TimeStamp
值删除相同。TimeStamp
但是当实体和数据库之间的值不匹配时,不会抛出异常。
在 C# 删除方法中,我首先检索最新记录,然后将TimeStamp
属性更新为另一个TimeStamp
值(它可能与检索到的值不同)。通过使用 SQL Profiler 进行一些调查后,我可以看到DELETE
存储过程已执行,但TimeStamp
传递给存储过程的参数是最新TimeStamp
值,而不是我将TimeStamp
属性设置为的值。因此记录被删除并且实体框架不会抛出异常。
为什么实体框架仍会将检索TimeStamp
到的值传递给存储过程,而不是我分配给属性的值?这是设计还是我错过了什么?
任何帮助将不胜感激!(当你需要她的时候,朱莉·勒曼在哪里!:-))