c# - 自跟踪实体 - 从导航属性中删除不会将状态设置为 'Deleted'

标签 c# .net entity-framework entity-framework-4 self-tracking-entities

在我的每个 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/

相关文章:

c# - 使用 Twitter 验证访问 token

c# - 搜索后覆盖记录 -MVVM WPF

c# - 如何使用 ExecuteSqlCommand 删除 Entity Framework 中的记录?

c# - 父类中的属性 - 可以更改子类中的属性名称吗?

c# - 如何在 c# 中的另一个程序之上制作非交互式图形叠加?

c# - 如何使用C#获取显示器支持的最大屏幕分辨率

c# - 如何修复此 "circular reference"c#

c# - 如何使用 .Net Core 中的单个 HttpClient 实例针对不同的请求发送不同的客户端证书?

c# - 对值类型的困惑

c# - 使用 LINQ 或 Entity Framework 拆分数据表以列出对象 C#