zoukankan      html  css  js  c++  java
  • 针对网上很多抱怨的言论,写了一个EF中update对象时,通用的遍历赋值方法,以供参考

    网上很多人抱怨说EF修改对象时,逐条赋值很麻烦,其实,用一个对象给另一个对象赋值,无论是哪门面向对象的语言,都是逐条的赋值,这是编程的基本原理决定的。希望大家不要单单对EF存偏见。但既然有那么多人提这个事,说明这终究是个问题,因此花几分钟时间,用反射写了个通用的遍历赋值方法,给大家参考。

    这个方法写的很简单,只是一个砖头,大家需要的话,拿去再自己完善。

        public class Temp
        {
            public int id { get; set; }
            public string name { get; set; }
            public string phone { get; set; }
            public Temp() { }
            public Temp(string name, string phone) {
                this.name = name;
                this.phone = phone;
            }
        }
        public void SetValue(Object newObj, Object srcObj)
        {
            var t1s = srcObj.GetType().GetProperties();
            var t2s = newObj.GetType().GetProperties();
            foreach (var p in t1s)
            {
                foreach (var q in t2s)
                {
                    if (q.Name == p.Name)
                    {// 这里有可能需要对属性的类型和值做一些判断和转换,大家自己根据自己的业务添加处理,估计不会很多
                        q.SetValue(newObj, p.GetValue(srcObj), null);
                    }
                }
            }
        }
        public void test()
        {            
            var t1 = new Temp("张三","13677889966");
            t1.id = 1;
            var t2 = new Temp();
            t2.id = 2;
            SetValue(t2, t1);
        }

    用反射做逻辑处理,本身效率很低,如果是做数据表处理,还有一定的风险(缺少.net数据对象自带的验证功能),因此,大多数情况下,不推荐这么用。


  • 相关阅读:
    vue-awesome-swiper-T 轮播图
    transition-T 手机端滑动验证
    VUE-T
    跨域配置-Access-Control-Allow-Origin
    HTML中CSS引入图片并铺满背景
    mysql_affected_rows()、mysql_fetch_row、mysql_fetch_assoc
    tp框架的四种路由方式
    sql注入
    禁用cookie,怎么获得session
    git解决冲突的方法
  • 原文地址:https://www.cnblogs.com/foren/p/6009088.html
Copyright © 2011-2022 走看看