2011-10-26 77 views
0

如何獲取實體的舊值?如何獲取實體的舊值?

如下的例子..

 
public void Update(User user) 
    ValidateEntity(user, OperationType.Update); 

    oldUser = (how do I get the old values ​​(database) of the entity User?) 

    Set.Attach(user); 
    Context.ObjectStateManager.ChangeObjectState(user, EntityState.Modified); 
    Context.SaveChanges(); 

    OnUpdated(user, oldUser); 
} 

回答

0

試試這個:

public void Update(User user) 
    ValidateEntity(user, OperationType.Update); 

    var oldUser = Set.Single(u => u.Id == user.Id); 
    Context.Detach(oldUser); 

    Set.Attach(user); 
    Context.ObjectStateManager.ChangeObjectState(user, EntityState.Modified); 
    Context.SaveChanges(); 

    OnUpdated(user, oldUser); 
} 

或者這樣:

public void Update(User user) 
{ 
    ValidateEntity(user, OperationType.Update); 

    var oldUser = Set.Single(u => u.Id == user.Id); 
    Set.ApplyCurrentValues(user); 
    Context.SaveChanges(SaveOptions.DetectChangesBeforeSave); 

    OnUpdated(user, Context.ObjectStateManager.GetOjectStateEntry(user).OriginalValues); 

    Context.AcceptAllChanges(); 
} 
+0

謝謝,這工作,但讓別人懷疑。 如何從此DbDataRecord獲取實體? – Hemerson

0

我使用反射發現轉換DbDataRecord的一種方式,以實體類型.. 。

其中http://www.instanceofanobject.com/2011/01/ef4-dbdatarecord-convertto.html

 
    public static class AnonymousTypeConversion 
    { 
     /// 
     /// Converts a single DbDataRwcord object into something else. 
     /// The destination type must have a default constructor. 
     /// 
     /// 
     /// 
     /// 
     public static T ConvertTo(this DbDataRecord record) 
     { 
      T item = Activator.CreateInstance(); 
      for (int f = 0; f 
     /// Converts a list of DbDataRecord to a list of something else. 
     /// 
     /// 
     /// 
     /// 
     public static List ConvertTo(this List list) 
     { 
      List result = (List)Activator.CreateInstance>(); 

      list.ForEach(rec => 
      { 
       result.Add(rec.ConvertTo()); 
      }); 

      return result; 
     } 
    }