SQL Server中的悲观并发——不能释放应用程序锁



我有一个应用程序锁定悲观并发,并在Asp中生成代码。净Mvc。

_ContextB.Database.ExecuteSqlCommand("Execute Sp_GetAppLock 'Code Generation', 'Exclusive'");
_ContextB.Entities.Add(entity);
_ContextB.SaveChanges();
// Generate code in a Sql Server Trigger(On Insert)

错误:

_ContextB.Database.ExecuteSqlCommand("Execute Sp_ReleaseAppLock 'Code Generation'");

不能释放应用程序锁(数据库主体:'public',资源:'Code Generation'),因为它当前没有被持有。

我使用了多上下文。

有什么问题吗?

谢谢。

EF默认为每个操作使用一个新连接。您的applock从未工作过,因为在该语句之后连接被关闭。

最好的修复方法是:

  1. 显式打开连接
  2. 将上下文包裹在using中以确保连接被关闭
  3. 打开显式事务,以便控制事务边界

考虑使用锁表代替Sp_GetAppLock。用EF就容易多了。使表只有一行,并增加一个虚拟列以进行写操作。

最新更新