Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有相同类型实体的多级级联删除_C#_Entity Framework - Fatal编程技术网

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;
}