【发布时间】:2013-10-19 05:53:03
【问题描述】:
我使用 EntityFramework 4.1。
我想要实现的是,每当对 FooEntity 的实体调用 SaveChanges 方法时,我首先要更新这些实体,然后再删除。
我尝试覆盖下面的默认行为,但我无法实现我想要的:它在 Db 上更新。但不能删除。
我怎样才能做到这一点?
public override int SaveChanges()
{
var entitiesMarkedAsDelete = ChangeTracker.Entries<FooEntity>()
.Where(e => e.State==EntityState.Deleted);
foreach (var e in entitiesMarkedAsDelete)
{
e.State = EntityState.Modified;
}
base.SaveChanges(); // To enforce an UPDATE first
// Now, I try to re-mark them to DELETE
foreach (var e in entitiesMarkedAsDelete)
{
e.State = EntityState.Deleted;
}
base.SaveChanges(); // And hope that they will be deleted
// RESULT: 1st call of base.Savechanges() updates the entities
// but the 2nd call of base.Savechanges() does not make any changes on the UPDATED
// entities -and they are NOT DELETED.
}
【问题讨论】:
-
我认为第一次调用 SaveChanges 会以某种方式刷新 changeTracker,即使我将 EntityState 更改为 Deleted,它也会忽略这一点。但即使我是对的,我也不知道该如何处理。
-
我相信你有充分的理由这样做......但在我看来删除之前的更新似乎毫无意义?
-
嗯,这在某种程度上是由于当前审计实体的设计发生了变化。而且如果我不先更新,我将无法获取删除记录的用户名。
标签: c# entity-framework entity-framework-4.1