C# 从父实体中删除子实体-EF Core 2.2
我想从集合中删除存在于一个实体中的项目。我面临的问题是: -正在从上下文中删除实体 -保存更改后,实体仍然存在 父对象:C# 从父实体中删除子实体-EF Core 2.2,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我想从集合中删除存在于一个实体中的项目。我面临的问题是: -正在从上下文中删除实体 -保存更改后,实体仍然存在 父对象: public class MyObject { public int Id { get; private set; } public ICollection<ChildObject> ChildObjcets { get; private set; } public void RemoveChildObject(ChildObject @
public class MyObject
{
public int Id { get; private set; }
public ICollection<ChildObject> ChildObjcets { get; private set; }
public void RemoveChildObject(ChildObject @object)
{
this.ChildObjcets.Remove(@object);
}
}
我所尝试的:
public void Proceed()
{
//myObject contain 4 child objects inside
var myObject = _repo.GetMyObject();
var childObject = _repo.GetChildObject();
myObject.RemoveChildObject(childObject);
//myObject contain 3 items now
}
在保存更改之前,我在更改跟踪器中看不到已删除的实体-是否应删除状态
var childObjects = ChangeTracker.Entries().Where(x => x.Entity is ChildObject).ToList(); // returns 3 - the removed one does not exist
但是,当我保存更改时,根对象仍然包含4个实体-因此子对象根本没有被删除
_repo.SaveChanges();
var myObject = _repo.GetMyObject();
知道如何从根实体中删除子对象吗?在entity Framework 6中,执行此操作的更快方法是
context.Children.RemoveRange(parent.Children)
从
ChildObjcets
集合中删除ChildObject
(请注意输入错误)意味着删除关系,而不是从DbContext
中删除实体。要完全删除实体,需要在DbSet
上显式调用remove
,而不能直接从根对象执行此操作
我建议将此操作移动到您的
\u repo
中,不管它实际引用什么。它应该可以访问DbContext
,因此任何DbSet
都应该修改更改跟踪器中子实体的状态。在SaveChanges
之后,应删除数据库中的子实体,并且更改跟踪条目应消失。所有这些只有在cascade delete打开的情况下,你确定你没有用fluent API关闭它吗?你的代码对我来说完美无瑕。该行为正是@IvanStoev所描述的。如果它只是删除了关系,为什么我不能在保存更改之前从上下文中获取所有4个ChildOJBECT?
context.Children.RemoveRange(parent.Children)