2012-04-27 96 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服务吗?在这种情况下,这些更改可能永远不会到来,因为对象图的更改是在对象上下文不可用的情况下进行的。考虑使用自跟踪实体