【发布时间】:2017-06-22 07:56:51
【问题描述】:
CONSTRAINT [FK_applications_orders] 外键 ([order_id]) 引用 [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 查询?
【问题讨论】:
-
如果你把
Database.Delete(order);注释掉,还会出现吗? -
我认为您删除订单会导致更新应用程序表以强制执行您的约束。
-
@mjwills 如果我注释掉
Database.Delete(order) -
当然不是……因为语句是Database.Delete引起的
-
我建议您删除或更新您的问题,因为显然
UPDATE查询不是由 Linq where 子句引起的
标签: c# sql-server asp.net-mvc entity-framework linq