我有数据库模型:{{3}}
CONSTRAINT [FK_applications_orders] FOREIGN KEY([order_id])REFERENCES [dbo]。[orders]([order_id])
控制器动作:
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查询?
答案 0 :(得分:3)
订单和应用程序之间存在FK约束。
当您从Orders表中删除时,EF将对Applicatoins表进行更新以强制执行此约束。
e.g。你有以下表格
订单强>
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
所以它正在更新该字段以将其设置为null。
<强>应用强>
application_id | order_id
100 | null
101 | 2