标签:www 测试 arp 代码 pre ges dem 解决 lca
modelBuilder.Entity<Doc>().HasMany(a => a.Lines).WithRequired(a => a.Doc).HasForeignKey(a => a.DocNo); //单头
modelBuilder.Entity<Line>().HasRequired(a => a.Doc).WithMany().HasForeignKey(a => a.DocNo).WillCascadeOnDelete(true); //表体
- 一对多场景,在子对象映射中开启级联删除情况下,删除父对象将自动删除其下所有子对象,需要注意一些事项:
- √ 需要保证DbContext中已经加载了该父对象的所有子对象。
- X 如果DbContext内未加载子对象将不级联删除子对象,
- X 如DbContext只加载部分子对象也只级联删除这些子对象。
- 因此在查询父对象只应该使用Include("子对象属性名")查询(请看示例代码3)或者在DbContext另外把其下所有子对象查询出来(请看示例代码4),再进行对父对象的删除方可级联删除子对象。
- 但注意以上所述情况只适用于关联子项比较少的情况,数据量少的演示测试Demo可以,工作中应该杜绝该类解决方案的出现。
using (var db = new Data())
{
var temp = db.Doc.Include("Lines").FirstOrDefault(a => a.DocNo.Equals(DocNo));
db.Doc.Remove(temp);
db.SaveChanges();
}
标签:www 测试 arp 代码 pre ges dem 解决 lca
原文地址:https://www.cnblogs.com/Alex-Mercer/p/12297912.html