2012-02-03 13 views
2

私はドキュメントライブラリサイトを持っており、ドキュメントオブジェクトが編集されたときに変更の要約を含む電子メールを送信したいと考えています。 - アップデートの値DBContext Entry.OriginalValuesとEntry.NewValuesで変更された値を記録する

[HttpPost] 
    public ActionResult Edit(Document document, bool sendEmail, string commentsTextBox) 
    { 

     if (ModelState.IsValid) 
     { 
      docsDB.Entry(document).State = EntityState.Modified; 

      foreach (string propertyName in docsDB.Entry(document).OriginalValues.PropertyNames) 
      { 
       var OriginalValue = docsDB.Entry(document).OriginalValues.GetValue<object>(propertyName); 
       var NewValue = docsDB.Entry(document).CurrentValues.GetValue<object>(propertyName); 
       if (!OriginalValue.Equals(NewValue)) 
       { 
        //capture the changes 
       } 
      } 

      docsDB.SaveChanges(); 
      if (sendEmail) 
      { 
       //sends email 
      } 
      return RedirectToAction("Index"); 

     } 

しかし、OriginalValueとnewValueは常に同じです:

データベースとの対話は、ここで私はこれまで持っているものである

DBContext

を使用して、コードファーストエンティティフレームワークです。

POSTの前にドキュメントの状態をキャプチャするためにファイルに書き込むような何かのハッキリがありますか?

答えて

5

更新されたプロパティとデータベースの値を比較するには、データベースからドキュメントをリロードする必要があります。この方法で試すことができます:

[HttpPost] 
public ActionResult Edit(Document document, bool sendEmail, 
    string commentsTextBox) 
{ 
    if (ModelState.IsValid) 
    { 
     var documentInDB = docsDB.Documents.Single(d => d.Id == document.Id); 

     docsDB.Entry(documentInDB).CurrentValues.SetValues(document); 

     foreach (string propertyName in docsDB.Entry(documentInDB) 
             .OriginalValues.PropertyNames) 
     { 
      var OriginalValue = docsDB.Entry(documentInDB) 
           .OriginalValues.GetValue<object>(propertyName); 
      var NewValue = docsDB.Entry(documentInDB) 
          .CurrentValues.GetValue<object>(propertyName); 

      if (!OriginalValue.Equals(NewValue)) 
      { 
       //capture the changes 
      } 
     } 

     docsDB.SaveChanges(); 
     if (sendEmail) 
     { 
      //sends email 
     } 
     return RedirectToAction("Index"); 
    } 
    // ... 
} 
+0

ありがとうございます!これで問題は解決しました。 –

関連する問題