0

我们的项目在 ASP.NET 上运行,我们使用带有LINQ(lambda 语法)的实体框架,我们需要防止同时插入到表中。我尝试使用ReaderWriterLock类,但它仅在一个会话中有效(在浏览器中打开更多选项卡时),但在更多不同的浏览器中无效。我还阅读了有关创建带有时间戳的表(不确定它是否可以解决我们的问题)或使用事务的信息,但现在不知道如何在带有LINQ.

你能告诉我如何在 ASP.NET 中处理这种独占的写访问吗?

4

1 回答 1

0

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

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

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

重要的提示

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

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

易失性数据可以读取但不能修改,事务过程中不能添加新数据。

在这里了解更多。

于 2013-03-04T09:08:41.447 回答