C# 具有相同类型实体的多级级联删除
我在域项目中有以下实体:C# 具有相同类型实体的多级级联删除,c#,entity-framework,C#,Entity Framework,我在域项目中有以下实体: public class Parent { ... private Guid Id { get; private set; } private virtual Child Child { get; private set; } public void RemoveChild() { Child = null; } ... } public class Child { ... priva
public class Parent {
...
private Guid Id { get; private set; }
private virtual Child Child { get; private set; }
public void RemoveChild() {
Child = null;
}
...
}
public class Child {
...
private Guid Id { get; private set; }
private virtual Grandchild Grandchild1 { get; private set; }
private virtual Grandchild Grandchild2 { get; private set; }
...
}
public class Grandchild {
...
private Guid Id { get; private set; }
...
}
是否可以设置上下文(代码优先方法),若我将null分配给父实体中的子实体,那个么子实体和孙子实体将从数据库中删除?我尝试设置DeleteBehavior.Cascade对子对象的孙子1ID和孙子2ID进行级联,但SQL Server不允许在实体中级联删除两个相同类型的对象
我想解释一下这个场景:
(Parent entity) Child = null =>
(Parent table) ChildId = NULL =>
(Child table) Grandchild1Id = NULL, Grandchild2Id = NULL =>
(Grandchild table) Deletes rows with Grandchild1Id AND Grandchild2Id
这个怎么样
编辑:
使用:
我以前使用它进行级联插入或更新
string PK = "Id";
int id = (int)item.GetType().GetProperty(PK).GetValue(item); // int? be better
if (id == 0)
{
dbContext.Entry(item).State = System.Data.Entity.EntityState.Added;
}
else
{
dbContext.Entry(item).State = System.Data.Entity.EntityState.Modified;
}
我不能在域项目中使用上下文(除了抽象,但我不知道这是否是一个好主意)有趣的解决方案,但我不想向我的实体添加其他方法-它们是域类,不应该因为基础设施而受到污染solutions@vamteusz看一看我不确定你到底需要什么嗯。。。那很有趣。我认为它可以通过覆盖保存更改和检测空实体来设置,然后删除所有子实体。谢谢我以前使用它来级联多维模型的插入或更新。就像你想马上把父母和孩子一起救出来一样。因为这通常会引起巨大的问题。EF总是插入所有子项,从不更新旧项。
CascadeDelete(ParentObj, dbContext);
dbContext.SaveChanges();
string PK = "Id";
int id = (int)item.GetType().GetProperty(PK).GetValue(item); // int? be better
if (id == 0)
{
dbContext.Entry(item).State = System.Data.Entity.EntityState.Added;
}
else
{
dbContext.Entry(item).State = System.Data.Entity.EntityState.Modified;
}