[英]remove row in parent-child table in Entity framework
我有一张表(代码优先,EF6,SQL Server):
public int Srl { get; set; }
public StringName{ get; set; }
public Nullable<int> Parent { get; set; }
我想删除带有特殊Srl
及其所有子项的表中的一行。 请注意,一行的子级可能类似于:
row->
Child1->
Child1-1
Child2->
Child3->
Child3-1
Child3-2->
Child3-2-1
Child4
我写这个方法:
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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.