在我的每个 POCO 的构造函数中,我都有这个:
this.StartTracking();
确保为我的 POCO 之一的每个实例打开跟踪。我有一个包含实体 B 的 TrackableCollection 的实体 A。当我像这样加载我的实体 A 实例时:
using(MyContext ctx = new MyContext())
{
entityA = ctx.EntityA.Include("EntityB").Where(x => x.Id== id).FirstOrDefault();
}
查看实体 A 上的 ObjectsAddedToCollection 属性,有 1 个对象标记为“未更改”。当我执行 entityA.EntityB[0].MarkAsDeleted() 时,状态不会设置为“已删除”并移动到 ObjectsRemovedFromCollection 集合。它只是被完全删除。我仔细检查了实体 A 和实体 B 的 ChangeTrackingEnabled 都设置为 True。这是否不起作用?因此,我无法删除子实体并将更改保存到数据库中。
最佳答案
这似乎是一个错误。在 RecordRemovalFromCollectionProperties 方法中,我将简单返回的行更改为:
if(((IObjectWithChangeTracker) value).ChangeTracker.State == ObjectState.Added)
return;
这解决了我遇到的问题。
关于c# - 自跟踪实体 - 从导航属性中删除不会将状态设置为 'Deleted',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3515937/