CONSTRAINT [FK_applications_orders] FOREIGN KEY ([order_id]) REFERENCES [dbo].[orders] ([order_id])
和 Controller Action :
using (var tx = Database.Database.BeginTransaction())
{
var order = Database.Set<Order>().Find(someID);
var apps = Database.Set<Applications>().Where(x => x.Order.Id == order.Id).ToList();
Database.Delete(order);
tx.Commit();
}
我打开 SQL 探查器检查此行 var apps = Database...
生成的内容,然后查看:
exec sp_executesql N'UPDATE [dbo].[Applications]
SET [order_id] = NULL
WHERE (([application_id] = @0) AND ([order_id] = @1))
',N'@0 uniqueidentifier,@1 int',@0=SomeId,@1=SomeOtherId
那么为什么 Delete 调用会在 SQL Server 中生成 UPDATE 查询?
最佳答案
您在订单和应用程序之间有 FK 约束。
当您从 Orders 表中删除时,EF 将对 Applicatoins 表进行更新以强制执行此约束。
例如你有以下表格
订单
order_id
1
2
应用程序
application_id | order_id
100 | 1
101 | 2
当您删除一个订单(比如 order_id 1
)时,如果 EF 没有进行更新,您最终会得到
订单
order_id
2
应用程序
application_id | order_id
100 | 1 <---- What is this now ???
101 | 2
因此它正在更新该字段以将其设置为空。
应用程序
application_id | order_id
100 | null
101 | 2
关于c# - Linq DELETE 在 SQL Server 中生成 UPDATE 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44693476/