自我跟踪实体。惊人的。
除非你做类似的事情
return Db.Users;
没有一个自跟踪实体正在跟踪(直到它们可能被反序列化)。
美好的。因此,我们必须认识到返回给我们的实体可能没有启用跟踪。
怎么办???
我尝试过的事情
对于给定的方法体:
using (var db = new Database())
{
if (update.ChangeTracker.ChangeTrackingEnabled)
db.Configurations.ApplyChanges(update);
else
FigureItOut(update, db);
db.SaveChanges();
update.AcceptChanges();
}
以下所有实现FigureItOut
均失败:
db.Configurations.Attach(update);
db.DetectChanges();
也不
db.Configurations.Attach(update);
db.Configurations.ApplyCurrentValues(update);
也不
db.Configurations.Attach(update);
db.Configurations.ApplyOriginalValues(update);
也不
db.Configurations.Attach(update);
db.Configurations.ApplyChanges(update
也没有什么我能想到的,除了
- 从数据库中获取原始实体
- 手动比较每个属性
- 根据需要更新属性
确切地说,我应该对不跟踪自己的自我跟踪实体做什么?
小更新:
盲目地将实体标记为修改后的作品,但这似乎有点臭。在这种情况下我们能做到最好吗?