2012-04-27 70 views
0

在我當前的項目中,我需要在表中寫入應用程序中的所有值。例如,該傢伙更新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

一種方式來獲得新老價值觀是這樣的:

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]); 
} 

這是相當無用的,當然,但我敢肯定,你就會知道在做foreach循環來存儲更改。

0

這是WCF服務嗎?在這種情況下,這些更改可能永遠不會到來,因爲對象圖的更改是在對象上下文不可用的情況下進行的。考慮使用自跟蹤實體