2013-11-26 61 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(); 
    } 
} 
相關問題