EF查询出来的model,与自已创建的modl,取值进行更新

 /// <summary>                         
    ///创建人:蒋云峰
    ///日 期:2019/12/23
    ///描 述:更新实体,与数据库实体进行对比
    /// </summary>
    public class JyfUpdateModel
    {
        /// <summary>
        /// 当dataBaseObj与newObj具有相同的属性名时,如果newObj的这个属性没有值,则把dataBaseObj中的属性值赋值为newObj的这个属性
        /// 主要用于更新,防止清空掉原有的数据
        /// </summary>
        /// <param name="dataBaseObj">EF查询数据库得到的Model</param>
        /// <param name="newObj">表单提交到Action时,框架自动根据表单里面的字段创建的Model</param>
        public static void updateModel(object dataBaseObj, object newObj)
        {
            Type t = dataBaseObj.GetType();
            //3.2.3?获取实体类所有的公共属性??
            List<PropertyInfo> propertyInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();
            //3.2.4?创建实体属性字典集合??
            Dictionary<string, PropertyInfo> dicPropertys = new Dictionary<string, PropertyInfo>();
            //3.2.5?将实体属性中要修改的属性名?添加到字典集合中??键:属性名??值:属性对象??
            propertyInfos.ForEach(p =>
            {
                dicPropertys.Add(p.Name, p);
            });

            Type t2 = newObj.GetType();
            foreach (var item in t2.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList())
            {
                if (dicPropertys.Keys.Contains(item.Name))
                {
                    try
                    {
                        if (item.GetValue(newObj) == null && dicPropertys[item.Name].GetValue(dataBaseObj) != null)
                        {
                            item.SetValue(newObj, dicPropertys[item.Name].GetValue(dataBaseObj));
                        }

                    }
                    catch (Exception ex)
                    {
                        throw;
                    }
                }
            }
        }

    }

原文地址:https://www.cnblogs.com/jiangyunfeng/p/12607863.html

时间: 2024-10-01 07:26:03

EF查询出来的model,与自已创建的modl,取值进行更新的相关文章

查询最近一周的时间,时间的取值。

先看效果图: 现在显示的最近一周的日期. calculateCloseDate(); //定义一个初始化日期的函数 function calculateCloseDate(){ var nowTime1=new Date(); //获取今天的月份,如果月份小于10,前面+"0" var Months1=nowTime1.getMonth()+1<10?"0"+(nowTime1.getMonth()+1):nowTime1.getMonth()+1;//获取今

EF查询数据库框架的搭建

一个简单的EF查询框架除了运行项目外,大概需要5个类库项目,当然这个不是一定要这样做,这可以根据自己的需要设置有多少个项目.这里介绍的方法步骤只适合EF零基础的人看看就是了. 在开始之前,先建立一个运行项目,不管是MVC还是winfrom项目,只要能运行就OK,这是为了在后面能测试EF框架的地方. 一.模型项目.这个项目主要负责与数据库映射的,里面的类都是数据库表的实体. 首先在解决方案中建一个文件夹EFModel,这里将会收纳所有的与EF查询有关的项目,这样做只是为了将他们与运行项目分开而已,

linq和EF查询的用法和区分

我们做项目时,难免会遇到用的不知道是啥,及把linq和EF搞混了 今天我带领大家梳理下思路: 首先说linq查询,然后介绍EF查询 1.linq查询 当我们使用linq查询时,转到定义会调到Queryable 类,  那么也就是说,这个类封装了linq所有查询的方法,那么我们来研究研究这个类 MSDN上是这样解释的:提供一组用于查询实现 IQueryable<T> 的数据结构的 static(在 Visual Basic 中为 Shared)方法. 命名空间:   System.Linq程序集

Entity Framework 4.1 之八:绕过 EF 查询映射

原文名称:Entity Framework 4.1: Bypassing EF query mapping (8) 原文地址:http://vincentlauzon.wordpress.com/2011/04/21/entity-framework-4-1-bypassing-ef-query-mapping-8/ 看到 Entity Framework 4.1 推荐英文教程,为了帮大家看起来方便一些,简单翻译一下.这是一个系列,共有 8 篇,这是第 8 篇. Entity Framework

EF DataBase First生成model的验证

如何避免在EF自动生成的model中的DataAnnotation被覆盖掉 相信很多人刚接触EF+MVC的时候,DataBase First模式生成model类中加验证信息的时候,会在重新生成model的时候被重写掉.这里介绍一个方法:比如我有个Book类是从数据库中生成到model中的,我们可以在Models文件夹中创建一个局部类名称与Book类同名(注意:该类的命名空间必须与自动生 成的类属于同一个命名空间),类内容为空的就可以,然后在新建的部分类下方再创建一个类(BookMetaData)

如何避免在EF自动生成的model中的DataAnnotation被覆盖掉

相信很多人刚接触EF+MVC的时候,会有这个疑问,就是当我们在model类中加验证信息的时候,会在重新生成model的时候被重写掉.这里介绍一个方法: 比如我有个Employee类是从数据库中生成到model中的,我们可以在Models文件夹中创建一个部分类名称与Employee类同名,然后在新建的部分类中加上我们需要验证信息,这时我们在view页面中引用Models.Employee做为页面model类.这样当我们重新生成model的时候,我们自己定义的部分类Employee就不会受影响了.

asp.net core系列 32 EF查询数据 必备知识(1)

一.查询的工作原理 Entity Framework Core 使用语言集成查询 (LINQ) 来查询数据库中的数据. 通过 LINQ 可使用 C#(或你选择的其他 .NET 语言)基于派生上下文和实体类编写强类型查询. LINQ 查询的表示形式会传递给数据库提供程序,进而转换为特定的数据库查询语言(例如,适用于关系数据库的 SQL). 1.1 查询的生命周期, 下面是每个查询所经历的过程概述: (1) LINQ 查询由 E F处理,用于生成已准备好的表示形式,由数据库提供程序处理.缓存结果,以

EF 学习系列二 数据库表的创建和表关系配置(Fluent API、Data Annotations、约定)

上一篇写了<Entity Farmework领域建模方式 3种编程方式>,现在就Code First 继续学习 1.数据库表的创建 新建一个MVC的项目,在引用右击管理NuGet程序包,点击浏览搜索EF安装,我这里主要是EF6.0 以上的学习 所以都安装6.0 以上的版本 接下来在Model文件夹下面创建一个Customer类 public class Customer { public int ID { get; set; } public string Name { get; set; }

EF查询视图只得到一条记录

1.出错结果:数据库表视图有多条数据,在使用EF框架进行查询时却只得到一条数据(注:拦截EF得到的sql语句在数据库进行查询并没有任务问题). 2.出错原因:该视图中没有ID或者主键,EF查询时进行反射默认都是同一条数据. 3.总结:EF框架查询视图时需要注意加入ID或者主键 以上仅是个人简单分析.