Vac*_*ano 5 c# entity-framework entity-framework-4 wcf-data-services odata
我有一个OData服务(使用实体框架的WCF数据服务).
所有这些服务都是选择数据.(没有写过.)
当我运行我的OData查询时,我偶尔会收到这样的错误:
事务(进程ID 95)在锁资源上与另一个进程死锁,并被选为死锁牺牲品.重新运行该交易
select语句可以成为死锁受害者吗?或者是实体框架试图锁定不应该锁定的东西?
如果它锁定在它不应该的位置,是否有办法告诉实体框架永远不会锁定?(对于这项服务,它总是永远是只读的.)
usr*_*usr 11
不要只使用ReadUncommitted或NOLOCK.这些将a)容易返回不一致的结果,b)由于"数据移动"而导致虚假错误.别!
更好的想法是使用以下SQL启用快照隔离:
ALTER DATABASE [DB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE [DB] SET READ_COMMITTED_SNAPSHOT ON;
ALTER DATABASE [DB] SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE [DB] SET MULTI_USER
Run Code Online (Sandbox Code Playgroud)
这将导致读取事务不接受任何锁定,并且不会被现有锁定阻止.这可能会解决您的问题.