• c#反射在ORM中的应用


    引用:https://www.bilibili.com/video/BV19J411v7yk?p=1

    (1)ORM

           对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。.NET中EF,Log4就是这种框架。

    什么是“持久化” 
    持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

    什么是 “持久层” 
    持久层(Persistence Layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。

     (2)下面是一个使用反射获取字段属性并赋值的例子

     public  class People
        {
    
            public People()
            {
                Console.WriteLine("{0}被创建",this.GetType().FullName);
    
            }
            public int Id { get; set; }
            /// <summary>
            /// 属性Name
            /// </summary>
            public string Name { get; set; }
            /// <summary>
            /// 字段Description
            /// </summary>
            public string Description;
        }

    下面是调用:

          static void Main(string[] args)
            {
                try
                {   
                    //获取类型--可以不用动态加载,直接获取类型
                    Type type = typeof(People);
                    //创建对象
                    object o = Activator.CreateInstance(type); 
                    //获取属性并赋值
                    foreach (PropertyInfo property in type.GetProperties())
                    {
                        if (property.Name.Equals("Id"))
                        {
                            property.SetValue(o, 12);
                        }
                        else
                        {
                            property.SetValue(o, "测试名称");
                        }
                    }
                    foreach (FieldInfo filed in type.GetFields())
                    {
                        if (filed.Name.Equals("Description"))
                        {
                            filed.SetValue(o, "测试描述"); 
                        }
                    }
                    //上面是赋值,下面可以获取相应的值
                    foreach (PropertyInfo property in type.GetProperties())
                    {
                     
                        Console.WriteLine($"属性名称:{property.Name},值:{property.GetValue(o)}");
                    }
                    foreach (FieldInfo filed in type.GetFields())
                    {
                        Console.WriteLine($"字段名称:{filed.Name},值:{filed.GetValue(o)}");
                    }
    
                    Console.ReadKey();
    
                }
                catch (Exception e)
                {
    
                }
            }

    结果

    Reflection.Model.People被创建
    属性名称:Id,值:12
    属性名称:Name,值:测试名称
    字段名称:Description,值:测试描述

    (3)封装ORM,通过ID做唯一查询

  • 相关阅读:
    Mbps、Kbps、bps、kb、mb区别和换算
    Python导入模块方法
    C# WinForm 程序免安装 .NET Framework(XP/win7/win10环境运行)
    生成缩略图
    WCF 的优势和特点
    不要在using语句中调用WCF服务
    pb getchild获取DropDownDW子窗体后进行取值
    Bootstrap后台管理模板调研
    PB调用C#编写的DLL
    PowerBuilder与嵌入浏览器交互
  • 原文地址:https://www.cnblogs.com/anjingdian/p/12822483.html
Copyright © 2020-2023  润新知