Dev*_*pex 13 .net c# entity-framework
我有DB模型与每种类型的表继承.例如,实体是A,B,C,A1,A2.基础 - 衍生 - A1,A2.另一个 - B,C.因此,A与A1和A2具有1对1的关联.B和C分别与A1和A2有关联(1到多个,在DB侧有OnDelete动作).
问题
我试图从B中删除记录,所以我希望EF也删除与当前B记录相关的所有A1对象.
最后,EF从B中删除记录,从A1中删除所有相关记录,但不从A中删除
为什么?如何解决?
这是一个已知问题,我称之为bug.显然,仅从表中删除A1派生实体属性的记录是不正确的.数据库中的其余数据(在表中A)确实代表另一种对象类型.换句话说:这个DELETE实际上并没有删除一个实体,但是它改变了实体的类型=将一个类型A1的对象转换为一个类型的对象A- 如果A是一个抽象实体,那就更没意义了.
从这里推荐的解决方法(据我所知)是丑陋的:
var b = context.Bs.Include("A1s").Single(b => b.Id == 1);
foreach (var a1 in b.A1s.ToList())
context.As.Remove(a1);
context.Bs.Remove(b);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
context.As.Remove(a1);应该从两个表A和A1表中删除,从而解决表中孤立记录的问题A.不幸的是,您被迫从数据库加载子项以正确删除父项.
这是关于这个问题的另一个问题和答案:在EF 4.2中使用TPT(每种类型的表)和删除父对象的问题
| 归档时间: |
|
| 查看次数: |
4670 次 |
| 最近记录: |