Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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#_Sql Server_Entity Framework - Fatal编程技术网

C# 删除实体框架中父子表中的行

C# 删除实体框架中父子表中的行,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我有一个表(代码优先,EF6,Sql Server): 我写这个方法: private void DeleteObjectAndChildren(int id) { var menu = db.Menus.Where(m => m.Parent == id).ToList(); foreach (var item in menu) { var child = db.Men

我有一个表(代码优先,EF6,Sql Server):

我写这个方法:

private void DeleteObjectAndChildren(int id)
        {
            var menu = db.Menus.Where(m => m.Parent == id).ToList();
            foreach (var item in menu)
            {
                var child = db.Menus.Where(m => m.Parent == item.Srl).ToList();

                if (child.Count != 0)
                {
                    DeleteObjectAndChildren(item.Srl);
                }
                else
                {
                    db.Menus.Remove(item);
                }
            }
            db.SaveChanges();
        }
代码运行时没有错误,但数据库中没有任何更改。有人知道我怎么了吗


还有谁能建议一种更好的方法来删除一行及其所有子行吗?

其中一种方法,你可以在找到子行后删除它

MyDbContext db = new MyDbContext();
public List<Menus> GetChildren(int id)
{
    return db.Menus.Where(i => i.Parent == id || i.Id == id).ToList().Union(db.Menus.Where(i => i.Parent == id).ToList().SelectMany(i => GetChildren(i.Id)).ToList()).ToList();            
}
public void DeleteMenus(int id)
{
    GetChildren(id).ForEach(i => db.Entry(i).State = System.Data.Entity.EntityState.Deleted);
    db.SaveChanges();
}
MyDbContext db=new MyDbContext();
公共列表GetChildren(int-id)
{
返回db.Menus.Where(i=>i.Parent==id | i.id==id).ToList().Union(db.Menus.Where(i=>i.Parent==id).ToList().SelectMany(i=>GetChildren(i.id)).ToList().ToList();
}
公共无效删除菜单(内部id)
{
GetChildren(id).ForEach(i=>db.Entry(i).State=System.Data.Entity.EntityState.Deleted);
db.SaveChanges();
}

您可以发布有问题的完整实体模型吗?现在的情况(没有任何导航属性),我看不出如何定义关系。
private void DeleteObjectAndChildren(int id)
        {
            var menu = db.Menus.Where(m => m.Parent == id).ToList();
            foreach (var item in menu)
            {
                var child = db.Menus.Where(m => m.Parent == item.Srl).ToList();

                if (child.Count != 0)
                {
                    DeleteObjectAndChildren(item.Srl);
                }
                else
                {
                    db.Menus.Remove(item);
                }
            }
            db.SaveChanges();
        }
MyDbContext db = new MyDbContext();
public List<Menus> GetChildren(int id)
{
    return db.Menus.Where(i => i.Parent == id || i.Id == id).ToList().Union(db.Menus.Where(i => i.Parent == id).ToList().SelectMany(i => GetChildren(i.Id)).ToList()).ToList();            
}
public void DeleteMenus(int id)
{
    GetChildren(id).ForEach(i => db.Entry(i).State = System.Data.Entity.EntityState.Deleted);
    db.SaveChanges();
}