私はEntityFramework 4.1を使用しています。
私が達成したいのは、SaveChanges メソッドが FooEntity であるエンティティで呼び出されるたびに、最初にそれらのエンティティを更新してから削除したいということです。
以下のようにデフォルトの動作をオーバーライドしようとしましたが、目的を達成できません。Db で更新されます。ただし、DELETE ではありません。
どうすればこれを達成できますか?
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.
}