如何在不手动设置每个属性的情况下更新数据库中的实体对象?

时间:2013-11-26 11:33:37

标签: c# entity-framework-4

我正在使用实体框架更新我的数据库表,但手动设置每个属性。

 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的事情,但我找不到像我这样的简单例子

1 个答案:

答案 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();
    }
}