首页新闻找找看学习计划

EF扩展方法(比较实体确定修改)

0
悬赏园豆:10 [已解决问题] 解决于 2013-04-05 10:39

我想写一个EF的扩展方法,实现:两个一样的实体,实体1和实体2,实体1和数据库同步,实体2和用户修改同步,但实体2中修改的属性是部分的,没有修改的保持为null,我想通过一个扩展方法,把实体2中修改的属性,填充到实体1中,实体2中没有修改的即为null的属性不填充。以达到修改部分字段的功能。望哪位大侠不吝赐教!感激不尽!本人QQ:455274752

牟珏玘的主页 牟珏玘 | 初学一级 | 园豆:172
提问于:2013-04-03 09:42
< >
分享
最佳答案
1

here you go, a 是 实体2, b 是 实体1

public static void ShadowCopy(object a, object b)
{
    if (a.GetType() == b.GetType())
    {
        PropertyInfo[] properties = a.GetType().GetProperties();
    
        foreach (var p in properties)
        {
            var value = p.GetValue(a, null);
            if (value != GetDefault(p.GetType()))
                p.SetValue(b, value, null);
        }
    }
}

public static object GetDefault(Type type)
{
   if(type.IsValueType)
   {
      return Activator.CreateInstance(type);
   }
   return null;
}
收获园豆:7
gunsmoke | 老鸟四级 |园豆:3592 | 2013-04-05 10:32

正是我想要的,谢谢!

牟珏玘 | 园豆:172 (初学一级) | 2013-04-05 11:57
其他回答(3)
0

我想可以用反射写个copy的方法,方法体循环属性,为null则continue。

收获园豆:1
问心、 | 园豆:104 (初学一级) | 2013-04-03 10:01

求事例代码

支持(0) 反对(0) 牟珏玘 | 园豆:172 (初学一级) | 2013-04-03 10:12
0

Map两个类的属于的对应关系,然后用反射检查,update实体

收获园豆:1
sinhbv | 园豆:2579 (老鸟四级) | 2013-04-03 10:02

求事例代码

支持(0) 反对(0) 牟珏玘 | 园豆:172 (初学一级) | 2013-04-03 10:12
0

这方面的扩展还真没有,你更新不就行了

收获园豆:1
jerry-Tom | 园豆:4077 (老鸟四级) | 2013-04-03 14:25

字段太多,更新起来不方便,代码太冗余。

支持(0) 反对(0) 牟珏玘 | 园豆:172 (初学一级) | 2013-04-03 15:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册