Dan*_*iel 6 c# t-sql entity-framework entity-framework-6
SQL Server 使用“inserted”关键字提供插入和更新记录的输出。
我有一个代表处理队列的表。我使用以下查询来锁定记录并获取锁定记录的 ID:
UPDATE TOP (1) GlobalTrans
SET LockDateTime = GETUTCDATE()
OUTPUT inserted.ID
WHERE LockDateTime IS NULL
Run Code Online (Sandbox Code Playgroud)
这将输出一个名为 ID 的列,其中包含所有更新的记录 ID(在我的例子中为单个 ID)。如何将其转换为 C# 中的 EF 来执行更新并取回 ID?
实体框架无法做到这一点。
您可以通过 ORM 方式来完成此操作,方法是选择所有记录,设置它们的 LockDateTime 并将它们写回。这对于您想要做的事情来说可能不安全,因为默认情况下它不是一笔交易。
您可以跨越自己的事务并使用RepeatableRead作为隔离级别。那应该有效。不过,根据您的数据库在后台执行的操作,这可能有点矫枉过正。
您可以手动编写 SQL 。这违背了实体框架的目的,但就锁定机制而言,它应该和以前一样安全。
您还可以将其放入存储过程中并调用它。它比上面的版本好一点,因为至少有人会编译它并检查表和列名称是否正确。
归档时间: |
|
查看次数: |
2684 次 |
最近记录: |