我有一个使用EF Core的存储库。在下面的场景中,我首先获取一个实体以及一个相关的子集合。然后我删除所有子项并添加一个新子项,并在父实体上更新一个属性。
在父级更新后保存属性后,将添加新的子实体,但所有原始子实体仍在数据库中。
如何让EF跟踪已删除的子实体?
class Repository
{
public Parent GetParent(int id)
{
using (var db = new LocalDbContext())
{
return db.Parents.Include(item => item.Images).FirstOrDefault(item => item.Id == id);
}
}
public void UpdateParent(Parent parent)
{
using (var db = new LocalDbContext())
{
var entry = db.Parents.Attach(parent);
entry.State = EntityState.Modified;
db.SaveChanges();
}
}
}
var instance = new LocalDbContext();
var repository = new Repository();
var parent = repository.GetParent(123);
parent.SomeField = 999;
parent.Children.RemoveRange(0, parent.Children.Count);
parent.Children.Add(new Child() { SomeOtherField = "qwe" });
repository.UpdateParent(parent);
答案 0 :(得分:2)
致电
db.Children.RemoveRange(parent.Children);
应从数据库中删除子实体。
在存储库中添加方法:
public void RemoveChildren(IEnumerable<Children> children)
{
using(var db = new LocalDbContext())
{
db.Children.RemoveRange(children);
db.SaveChanges();
}
}
并使用它:
var parent = repository.GetParent(123);
repository.RemoveChildren(parent.Children);