我有一个Web应用程序,我建立了一个工作线程,其中包含对数据库行的引用。
我有一个调用Web应用程序的外部服务,并且根据用户输入的结果,更新数据库中的行。
我想检查这些数据库行是否已被修改,但我不希望通过查询来执行此操作,因为我每秒都要执行多次操作。< / p>
所以这就是我的问题,当另一个进程更新数据库时,对数据库行的引用是否会更新?这些参考是非易失性的吗?对于后者,检查行是否已更新的最佳方法是什么?
为清楚起见:
此对象指针表示数据库表中的单个行:
Callout co = await db.Callouts.FindAsync(id);
答案 0 :(得分:2)
您正在寻找的流行语是Optimistic Concurrency Control。
虽然听起来你想要自己动手,但如果你正确设置,你可能不会意识到EF可以为你做这件事。
您需要将以下内容添加到数据模型中:
[Timestamp]
public byte[] RowVersion { get; set; }
此外,您需要将ConcurrencyCheckAttribute添加到您的数据成员。
最后,您需要编写代码来处理OptimisticConcurrencyException。
可以找到使用EF执行此操作的教程here。
如果您真的不想这样做,并希望在修改表格时通知您的应用,则可以使用SqlTableDependency之类的内容完成此操作。