2017-06-13 7 views
0

OpenAccessContext内の新しい/変更済み/削除済みのエンティティに次のコマンドでアクセスできることはわかっています。例外が発生した場合のOpenAccessContextでの変更されたエンティティの取得

dbContext.GetChanges().GetInserts<object>() dbContext.GetChanges().GetUpdates<object>() dbContext.GetChanges().GetDeletes<object>()

のSaveChangesをperfomingながらexecptionは(いかなる理由でもoccures場合)、私はそれらのエンティティをログに記録する必要があるが、それらは、例外の場合にクリアされます。

例外が発生した場合にOpenAccessContextからエンティティを取得する方法はありますか?

答えて

1

あなたはこのようなSaveChangesメソッドオーバーライドすることができます:のSaveChangesが失敗した場合

public override void SaveChanges() 
    { 
    ContextChanges cruds = this.GetChanges; 
    IList<object> inserts = cruds.GetInserts<object>(); 
    IList<object> updates = cruds.GetUpdates<object>(); 
    IList<object> deletes = cruds.GetDeletes<object>(); 

    try { 
     base.SaveChanges(ConcurrencyConflictsProcessingMode.AggregateAll); 
    } catch (Exception ex) { 
     // Retry or in your case log... 
     this.Refresh(RefreshMode.PreserveChanges, updates); 
     this.Delete(deletes); 
     this.Add(inserts); 

     Thread.Sleep(1000); 
     base.SaveChanges(); 
    } finally { 
     this.FlushChanges(true); 
    } 
    } 

を、変更がまだアクセス可能です。また、その間に例外を記録することもできます。

関連する問題