gpt4 book ai didi

c# - 使用 Entity Framework Core 在读取时锁定数据库行

转载 作者:行者123 更新时间:2023-11-30 23:23:00 25 4
gpt4 key购买 nike

如何使用 EF Core 在读取时锁定一行?我找到了一个使用 TransactionScope 的简单解决方案,但它们似乎不起作用(找不到类)

问题是当我在一个线程中删除一个项目时,按删除按钮两次,第二次该项目不存在,所以我得到一个异常。

我的第一个解决方案是检查该项目是否仍然存在,但由于方法被称为任务,因此两个任务都会在其中一个任务删除它之前执行检查。所以我需要锁定这一行以阻止第二个任务产生错误。

快速解决方案当然是尝试空捕获,但我更愿意以干净的方式处理它。

最佳答案

另一种选择是不使用 EF 进行删除操作。

如果您执行原始 SQL DELETE TableName WHERE PrimaryKey = @Key 并且记录已被删除,那么您将不会收到错误。


小巧玲珑

    using (var sqlConnection = new System.Data.SqlClient.SqlConnection(Connectionstring))
{
sqlConnection.Open();
string sqlQuery = "DELETE FROM [dbo].[Customer] WHERE CustomerId=@CustomerId";
sqlConnection.Execute(sqlQuery, new {customerId});
sqlConnection.Close();

}

龟链

dataSource.DeleteByKey ( "Customer", CustomerId).Execute();

EF

using (var context = new [...]) {

context.Database.ExecuteSqlCommand("DELETE FROM [dbo].[Customer] WHERE CustomerId=@CustomerId", new SqlParameter("@CustomerId", CustomerId));

}

(是的,使用 EF 执行非 EF 查询很浪费,但这是一个选项。)

关于c# - 使用 Entity Framework Core 在读取时锁定数据库行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38557058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com