Linq DELETE在SQL Server中生成UPDATE查询

时间:2017-06-22 07:56:51

标签: c# sql-server asp.net-mvc entity-framework linq

我有数据库模型:{{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查询?

1 个答案:

答案 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