Asp.net - 它如何处理对数据库行的引用?

时间:2017-01-20 23:45:29

标签: c# asp.net multithreading linq asp.net-mvc-5

我有一个Web应用程序,我建立了一个工作线程,其中包含对数据库行的引用。

我有一个调用Web应用程序的外部服务,并且根据用户输入的结果,更新数据库中的行。

我想检查这些数据库行是否已被修改,但我不希望通过查询来执行此操作,因为我每秒都要执行多次操作。< / p>

所以这就是我的问题,当另一个进程更新数据库时,对数据库行的引用是否会更新?这些参考是非易失性的吗?对于后者,检查行是否已更新的最佳方法是什么?

为清楚起见:

此对象指针表示数据库表中的单个行:

Callout co = await db.Callouts.FindAsync(id);

1 个答案:

答案 0 :(得分:2)

您正在寻找的流行语是Optimistic Concurrency Control

虽然听起来你想要自己动手,但如果你正确设置,你可能不会意识到EF可以为你做这件事。

您需要将以下内容添加到数据模型中:

[Timestamp]
public byte[] RowVersion { get; set; }

此外,您需要将ConcurrencyCheckAttribute添加到您的数据成员。

最后,您需要编写代码来处理OptimisticConcurrencyException

可以找到使用EF执行此操作的教程here

如果您真的不想这样做,并希望在修改表格时通知您的应用,则可以使用SqlTableDependency之类的内容完成此操作。