2012-04-27 16 views
0

私の現在のプロジェクトでは、すべての値がアプリケーションで変更されたテーブルに書き込む必要があります。 Ex。男はUserNameを更新し、UserNameの古い値 "1"の新しい値 "2"をテーブルに入れる必要があります。EntityFrameWorkの変更を検出する

私はObjectStateEntryを使用しようとしましたが、これはすべてのフィールドを返します。私はFWが私のコードのためにすべてを返すと思う。

public USER Save(USER obj) 
     { 
      using(TPPTEntities db = new TPPTEntities()) 
      { 
       db.Connection.Open(); 
       USER o = (from n in db.USERs where n.ID == obj.ID select n).FirstOrDefault(); 
       if (o == null) 
       { 
        o = new USER() 
        { 
         BruteForce = 0, 
         Email = obj.Email, 
         IsBlock = false, 
         LastLogin = DateTime.Now, 
         Name = obj.Name, 
         UserName = obj.UserName, 
         UserPassword = new byte[0], 

        }; 
        db.AddToUSERs(o); 
       } 
       else 
       { 
        o.Email = obj.Email; 
        o.Name = obj.Name; 
        o.UserName = obj.UserName; 

       } 
       db.SaveChanges(); 
       db.Connection.Close(); 
      } 
      return obj; 
     } 

答えて

1

の使用を検討してくださいforeach変更を保存するループ。

0

これはWCFサービスですか?その場合、Object Contextが利用できない場合には、Object Graphへの変更が行われるため、おそらく変化は起こりません。

var ose = this.ObjectStateManager.GetObjectStateEntry(o.EntityKey); 
foreach (string propName in ose.GetModifiedProperties()) 
{ 
    string.Format("Property '{0}', old value: {1}, new value: {2}", 
     propName, ose.OriginalValues[propName], ose.CurrentValues[propName]); 
} 

もちろんこれは、かなり役に立たないですが、私はあなたが何をすべきか知っているだろうと確信している:古いものと新しい値を取得する方法はこれです自己追跡エンティティに

関連する問題