如何在ASP.NET中锁定数据库表

时间:2013-03-04 09:05:08

标签: asp.net linq locking

我们的项目在ASP.NET上运行,我们正在使用带有LINQ(lambda语法)的Entity Framework,我们需要防止同时插入表。我尝试使用ReaderWriterLock类,但它仅适用于一个会话(在浏览器中打开更多选项卡时),但不适用于更多不同的浏览器。我还读到了创建带有时间戳的表(不确定它是否可以解决我们的问题)或使用事务,但现在还没有确切地知道如何在带有LINQ的Web应用程序中使用它。

请告诉我如何在ASP.NET中处理这种独占写入权限?

1 个答案:

答案 0 :(得分:0)

ReaderWriterLockSlim可能是一个不错的选择,但如果您希望任何线程/进程可以共享同一个锁,则整个ReaderWriterLockSlim必须是静态成员。

也就是说,你的课应该是这样的:

public class Class1
{
     private readonly static ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
}

重要提示

使用应用程序层锁定,您将能够锁定自己的应用程序线程,以便限制一个线程一次访问数据库。但是其他应用程序(不是ASP.NET,或者是IIS上的另一个应用程序池中的另一个应用程序)也可以并行访问数据库进行读写操作。

如果您想要100%有效的解决方案,必须使用数据库事务。如果SQL Server是RDBMS,则可以进行Serializable隔离级别的事务:

  

可以读取易失性数据但不能修改,也不能有新数据   在交易期间添加。

Learn more here.