2013-11-26 2 views
-1

엔티티 프레임 워크를 사용하여 데이터베이스 테이블을 업데이트하지만 각 속성을 수동으로 설정합니다.각 속성을 수동으로 설정하지 않고 데이터베이스에서 내 개체 개체를 업데이트하는 방법?

using (BmEntities b = new BmEntities()) 
     { 
      var curUser = b.Distributor.Where(k => k.ID == updated.ID).First(); 

      curUser.UserEmail = updated.UserEmail; 
      curUser.UserName = updated.UserName; 
      curUser.UserAdres = updated.UserAdres; 
      curUser.UserLast = updated.UserLast; 
      curUser.Pass = updated.Pass; //these properties goes too much 
      b.SaveChanges(); 
     } 

위 예제 대신 간단한 예를 보여줄 수 있습니까? 해당 부동산이 20-30 세가되면 어떻게해야합니까? 내 친구는 나에게 AutoMapper에 대해 뭔가를 말해 줬지만 내처럼 간단한 예제를 찾을 수 없었다.

답변

0

다른 포럼에서 확장 방법을 찾았는데 AutoMapper가 아닌 곳에서 문제가 해결된다.

public static class ReflectionExtensions 
{ 
    public static void CopyPropertiesFrom(this object destObject, object sourceObject) 
    { 
     if (null == destObject) 
      throw new ArgumentNullException("destObject"); 
     if (null == sourceObject) 
      throw new ArgumentNullException("sourceObject"); 

     Type destObjectType = destObject.GetType(); 
     foreach (PropertyInfo sourcePi in sourceObject.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)) 
     { 
      PropertyInfo destPi = destObjectType.GetProperty(sourcePi.Name); 
      if (null != destPi && null != destPi.SetMethod) 
      { 
       object sourcePropertyValue = sourcePi.GetValue(sourceObject); 

       destPi.SetValue(destObject, sourcePropertyValue); 
      } 
     } 
    } 
} 

이 확장 메서드를 사용하면 이제 주어진 개체에서 모든 속성을 한 번에 복사 할 수 있습니다.

public static void Update_User(Distributor updated) 
{ 
    using (BmEntities b = new BmEntities()) 
    { 
     var curUser = b.Distributor.Where(k => k.ID == updated.ID).First(); 

     curUser.CopyPropertiesFrom(updated); 

     b.SaveChanges(); 
    } 
}