我有一个悲观并发的应用程序锁,并在Asp.Net 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',资源:'代码生成'),因为它当前未被保留。
我使用多上下文。
有什么问题?
感谢。
答案 0 :(得分:2)
默认情况下,EF为每个操作使用新连接。您的applock永远不会正常工作,因为在该声明之后关闭了连接。
最好的解决办法是:
考虑使用锁表而不是Sp_GetAppLock。使用EF更容易。使表有一行并增加一个虚拟列以引起写入。这确保了排他性并观察了事务语义。