我们的项目在ASP.NET上运行,我们正在使用带有LINQ
(lambda语法)的Entity Framework,我们需要防止同时插入表。我尝试使用ReaderWriterLock
类,但它仅适用于一个会话(在浏览器中打开更多选项卡时),但不适用于更多不同的浏览器。我还读到了创建带有时间戳的表(不确定它是否可以解决我们的问题)或使用事务,但现在还没有确切地知道如何在带有LINQ
的Web应用程序中使用它。
请告诉我如何在ASP.NET中处理这种独占写入权限?
答案 0 :(得分:0)
ReaderWriterLockSlim
可能是一个不错的选择,但如果您希望任何线程/进程可以共享同一个锁,则整个ReaderWriterLockSlim
必须是静态成员。
也就是说,你的课应该是这样的:
public class Class1
{
private readonly static ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();
}
使用应用程序层锁定,您将能够锁定自己的应用程序线程,以便限制一个线程一次访问数据库。但是其他应用程序(不是ASP.NET,或者是IIS上的另一个应用程序池中的另一个应用程序)也可以并行访问数据库进行读写操作。
如果您想要100%有效的解决方案,必须使用数据库事务。如果SQL Server是RDBMS,则可以进行Serializable
隔离级别的事务:
可以读取易失性数据但不能修改,也不能有新数据 在交易期间添加。