实体框架级联删除和延迟加载

Col*_*ion 5 c# entity-framework lazy-loading cascading-deletes

我正在使用Northwind示例数据库.我有这个代码:

var db = new NorthwindEntities();
int id = 2; // Example
var delObject = (from o in db.Orders.Include("Order_Details")
                 where o.OrderID == id
                 select o).First();
db.Orders.DeleteObject(delObject);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
  • 我在订单 - 订单明细中有一个(1对多)关联,带有级联删除.(如果我删除一个订单,将删除具有相同OrderID的所有Order_Details).

  • 启用了 LazyLoading .

如果删除.Include("Order_Details")from子句中的,则级联删除将不起作用.

为什么会这样?是不是懒惰的初始化应该为我"包含"Order_Details,最终让我级联删除?

Shi*_*iji 5

级联删除在EF模型中定义.

因此,EF将为已加载的数据生成删除语句.EF不会去数据库检查它应删除的内容.

您可以在数据库级别定义级联删除(取决于您的数据库).在这种情况下,EF将删除顶级节点,数据库将删除相关的行.