我正在使用实体框架更新我的数据库表,但手动设置每个属性。
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 :(得分: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();
}
}