2011-10-26 6 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; 
     } 
    }