• [C#]JCoder.Db4Net.ORM,基于JCoder.Db4Net的ORM库,轻量的MIT协议类库


    # JCoder.Db4Net.ORM

    属性
    作者(Authors)Jackie Law
    版权(Copyright)Copyright © Jackie Law. All rights reserved.
    协议MIT
    联系(QQ)1378071853
    联系(Wechat)JackieLaw1024
    联系(Email)JackieLaw-dev@outlook.com

    一.架构说明

    JCoder.Db4Net.ORM
    语言C#
    协议MIT
    .Net框架.Net Standard2.1; .Net Framework 4.7.2; .Net 7; .Net 6;
    简述Database类库,一个基于JCoder.Db4Net的ORM库。

    1.1 引用类库

    引用类库版本
    JCoder.Db4Net>=2.23.0

    1.2 相关类库

    相关类库说明
    JCoder.Db4Net一款为方便使用数据库的操作类库。
    JCoder.Db4Net.ORM一个基于JCoder.Db4Net的ORM库。
    JCoder.Db4Net.Sqlite一个基于JCoder.Db4Net且支持Sqlite的库。
    JCoder.Db4Net.MySql一个基于JCoder.Db4Net且支持Mysql的库。
    JCoder.Db4Net.SqlServer一个基于JCoder.Db4Net且支持SqlServer的库 。
    JCoder.Mock4Net一款简易版的用于模拟数据的功能库。
    JCore.Log4Net一款用于日志的类库。

    二.获取方式

    1. 版本要求:>=2.23.0
    2. 以版本2.23.0为例
    获取方式描述
    Package ManagerInstall-Package JCoder.Db4Net.ORM -Version 2.23.0
    .Net CLIdotnet add package JCoder.Db4Net.ORM --version 2.23.0
    PackageReference
    Paket CLIpaket add JCoder.Db4Net.ORM --version 2.23.0
    Script&Interactive#r "nuget: JCoder.Db4Net.ORM, 2.23.0"
    Cake// Install as a Cake Addin
    #addin nuget:?package=JCoder.Db4Net.ORM&version=2.23.0

    // Install as a Cake Tool
    #tool nuget:?package=JCoder.Db4Net.ORM&version=2.23.0

    三.使用说明

    3.1 主要类与接口

    名称类型描述
    Orm工具类,主要用于数据库在数据对象上的通用处理。

    3.2特性说明

    Attribute类应用位置描述
    DbDatabaseAttributeClass、Struct数据库的相关信息,可用于通过Entity进行CRUD。
    DbTableAttributeClass、Struct数据库的数据表信息,可用于通过Entity进行CRUD。
    DbViewAttributeClass、Struct数据库的视图信息,可用于通过Entity进行查询等操作。
    DbRefTableAttributeProperty(未完成)关联的数据表信息,可用于通过Entity获取关联的副表数据。
    DbFieldAttributeProperty数据列信息,可用于通过Entity进行CRUD。
    DbFieldExtendAttributeProperty数据列的扩展信息。
    DbFieldPropertyAttributeProperty数据列的属性信息。
    DbNumberExtAttributeProperty数字型数据列的扩展信息。
    DbStringExtAttributeProperty文本型数据列的扩展信息。
    DbTimeExtAttributeProperty时间型数据列的扩展信息。
    DbAllowNullAttributeProperty数据列是否允许为Null值。
    DbAutoIncrementAttributeProperty数据列是否自动增长。
    DbPrimaryKeyAttributeProperty数据列是否为主键数据列。
    DbForeignKeyAttributeProperty数据列是否为外键数据列。
    DbGuidAttributeProperty(未完成)数据列是否为GUID数据列。
    DbIndexAttributeProperty数据表的索引列信息。
    DbIndexFieldPropertyAttributeProperty数据表的索引列的扩展属性信息。
    DbIgnoreAttributeProperty进行与数据库相关的处理时,将忽略标记的字段与属性。
    DbIgnoreInsertAttributeProperty进行Insert处理时,将忽略标记的字段与属性。
    DbIgnoreUpdateAttributeProperty进行Update处理时,将忽略标记的字段与属性。
    DbEnumNameAttributePropertyEntity数据转换为DataTable时,将枚举字段、属性转换为枚举名称的数据列。
    DbFieldRouteAttributePropertyEntity数据转换为DataTable时,根据路径获取标记属性对象中的实例值。
    DbIgnoreConvertionAttributePropertyEntity数据转换为DataTable时,将忽略标记的字段与属性。
    DbJsonAttributeProperty(未完成)Entity数据转换为DataTable时,将字段、属性转换为Json格式的数据列。
    DbNameAttributeClass、Struct、Property名称信息。可应用于以下情况,1.定义DataTable的数据列名称;2.定义DataTable的Table名称;
    DbSortAttributeProperty排序信息。可用于Entity转换为DataTable时的DataColumn顺序。

    3.3 函数名称说明

    注意事项描述
    函数名称包含Entity或Entities属性数据处理以DbAttribute优先。
    函数名称包含Object或Objects属性数据有多种处理方式。
    OnlyProperty方式直接忽略DbAttribute。
    OnlyDbAttribute方式只处理有DbAttribute的。
    DbAttributeFirst方式以DbAttribute优先。

    3.4 扩展使用

    1)ToEntity1st(查询数据,并将首条数据转换为数据实例)
    // ToEntity1st(查询数据,并将首条数据转换为数据实例)
    using JCoder.Db4Net;
    using JCoder.Db4Net.ORM;
    
    IDbOperator _operator = new MsSqlFactoryOperator()
    {
        ConnectionString = "Server=127.0.0.1;Database=test;Uid = user; Pwd=testpassword;"
    };
    return this.Operator.ToEntity1st("select top 1 * from table1;");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    2)ToEntities(查询数据,并转换为数据实体列表)
    // ToEntities(查询数据,并转换为数据实体列表)
    using JCoder.Db4Net;
    using JCoder.Db4Net.ORM;
    
    IDbOperator _operator = new MsSqlFactoryOperator()
    {
        ConnectionString = "Server=127.0.0.1;Database=test;Uid = user; Pwd=testpassword;"
    };
    return this.Operator.ToEntities("select top 10 * from table1;");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    3)CRUD(增删查改)
    using JCoder.Db4Net;
    using JCoder.Db4Net.ORM;
    
    // Test Entity Class
    [DbTable("t_table_test")]
     public class TestEntity
     {
         [DbPrimaryKey]
         [DbAutoIncrement]
         public int Key001 { get; set; }
         [DbPrimaryKey]
         [DbField(IsUnique=true)]
         public string Key002 { get; set; }
    
         [DbIndex("idx01")]
         public string C003 { get; set; }
     }
    
    IDbOperator _operator = new MsSqlFactoryOperator()
    {
        ConnectionString = "Server=127.0.0.1;Database=test;Uid = user; Pwd=testpassword;"
    };
    
    TestEntity x = new TestEntity()
    {
        Key001 = 101,
        Key002 = "Test PK",
    };
    
    // Insert Data(新增数据)
    this.Operator.Insert(x);
    
    // Update Data(更新数据)
    x.C003 = "Update Test";
    this.Operator.Update(x);
    
    // Delete Data(删除数据)
    this.Operator.Delete(x);
    
    // Select Data(查询数据)
    this.Operator.Select1st(" and Key001=101 and Key002-'Test PK'");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    4)Create\Drop Table From Entity(由实体类创建\删除数据库的数据表)
    using JCoder.Db4Net;
    using JCoder.Db4Net.ORM;
    
    // Test Entity Class
     [DbTable("t_table_test")]
     public class TestEntity
     {
         [DbPrimaryKey]
         [DbAutoIncrement]
         public int Key001 { get; set; }
         [DbPrimaryKey]
         [DbField(IsUnique =true)]
         public string Key002 { get; set; }
         [DbIgnore]
         public string Key003 { get; set; }
    
         [DbIndex]
         [DbField(AllowNull = false, Default = "", Description = "Test Comment")]
         public string C001 { get; set; }
         [DbIndex("idx01")]
         public string C002 { get; set; }
         [DbIndex("idx01")]
         public string C003 { get; set; }
    
         [DbIgnore]
         public int C004 { get; set; }
         [DbField(AllowNull = false, Default = "0", Description = "Test Comment2")]
         public int C005 { get; set; }
         [DbNumberFieldExt(Precision = 11, Scale = 2)]
         public double C006 { get; set; }
    
         [DbField(AllowNull = false, Default = "", Description = "Test Comment2")]
         public string C007 { get; set; }
         public string C008 { get; set; }
         [DbTimeFieldExt(UpdateTimeOnCreate = true, UpdateTimeOnUpdate = true)]
         public DateTime C009 { get; set; }
     }
    
    IDbOperator _operator = new MsSqlFactoryOperator()
    {
        ConnectionString = "Server=127.0.0.1;Database=test;Uid = user; Pwd=testpassword;"
    };
    
    this.Operator.CreateTable();
    this.Operator.DropTable();
       
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    3.5 Orm工具类使用

    1)转换首条数据为实体对象(支持DbDataReader、DataTable)
    using JCoder.Db4Net.ORM;
    
    // data source
    var _table = new DataTable();
    // Property only.
    var _result = JCoder.Db4Net.ORM.Orm.ToObject1st(_table);
    var _result = _table.ToObject1st();
    // Attributes first
    var _result = JCoder.Db4Net.ORM.Orm.ToEntity1st(_table);
    var _result = _table.ToEntity1st();
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    2)将数据转换为实体对象(支持DataRow、IDictionary、IDictionary))
    using JCoder.Db4Net.ORM;
    
    // data source
    var _dict = new Dictionary();   
    // Attributes first
    var _result = JCoder.Db4Net.ORM.Orm.ToEntity(_dict);  
    var _result = _dict.ToEntity();     
    // Property only.
    var _result = JCoder.Db4Net.ORM.Orm.ToObject(_dict);
    var _result = _dict.ToObject();
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    3)将数据源转换为实体对象列表(支持DbDataReader、DataTable)
    using JCoder.Db4Net.ORM;
    
    // data source
    var _table = new DataTable();   
    // Attributes first
    var _result = JCoder.Db4Net.ORM.Orm.ToEntities(_table);
    var _result = _table.ToEntities();   
    // Property only.
    var _result = JCoder.Db4Net.ORM.Orm.ToObjects(_table);
    var _result = _table.ToObjects();
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    4)将数据源转换为实体对象字典(支持DbDataReader、DataTable)
    using JCoder.Db4Net.ORM;
    
    // data source
    var _table = new DataTable();
    _table.Columns.Add(new DataColumn("ID", typeof(string)));
    
    // Property only.
    var _result = JCoder.Db4Net.ORM.Orm.ToObjectDict(_table, "ID");
    var _result = _table.ToObjectDict("ID");
    // Attributes first
    var _result = JCoder.Db4Net.ORM.Orm.ToEntityDict(_table, "ID");
    var _result = _table.ToEntityDict("ID");
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    5)将数据填充到已有的实体对象里(支持DbDataReader、DataRow、IDictionary、IDictionary)
    using JCoder.Db4Net.ORM;
    
    var _target = new T();
    
    // data source
    var _source = new DbDataReader();   
    // Property only.
    var _result = JCoder.Db4Net.ORM.Orm.FillInObject(_source, _target);
    var _result = _source.FillInObject(_target);
    // Attributes first
    var _result = JCoder.Db4Net.ORM.Orm.FillInEntity(_source, _target);
    var _result = _source.FillInEntity(_target);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    6)将实体对象转换为DataTable
    using JCoder.Db4Net.ORM;
    
    var _list = new List();
    var t = new T();
    
    // Property only.
    // 实体对象转换为DataTable
    DataTable _table = JCoder.Db4Net.ORM.Orm.ObjectToDataTable(t);
    DataTable _table = t.ObjectToDataTable();
    // 实体对象列表转换为DataTable
    DataTable _table = JCoder.Db4Net.ORM.Orm.ObjectsToDataTable(_list);
    DataTable _table = _list.ObjectsToDataTable();
    
    // Attributes first
    // 实体对象转换为DataTable
    DataTable _table = JCoder.Db4Net.ORM.Orm.EntityToDataTable(t);
    DataTable _table = t.EntityToDataTable();
    // 实体对象列表转换为DataTable
    DataTable _table = JCoder.Db4Net.ORM.Orm.EntitiesToDataTable(_list);
    DataTable _table = _list.EntitiesToDataTable();
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    7)将List转换为DataTable
    using JCoder.Db4Net.ORM;
    
    // 将List转换为DataTable(使用特性进行排序,自定义名称等)
    public class BoTest
    {
         [DbSubField("Width", "S001-Width", Sort = 2120)]//获取Size对象里的Width属性值,并显示为"S001-Width"
         [DbSubField("Height", "S001-Height", Sort = 2121)]//获取Size对象里的Height属性值,并显示为"S001-Height"
         public Size S001 { get; set; }
         public string Key { get; set; }
         [DbEnumName]//枚举显示为文本
         public AttributeTargets AT { get; set; }
         public AttributeTargets AT2 { get; set; }
         [DbSort(100)]
         public string P100 { get; set; }
         [DbSort(111)]//设置排序值(从小到大依次排序)
         public string P111 { get; set; }
         public DateTime CreateTime { get; set; }
         [DbIgnoreConvertion]//转换时忽略
         public int Z001 { get; set; }
    }
    
     var _list = new List();
     for (int i = 0; i < 100; i++)
     {
         _list.Add(new()
         {
             S001 = new(i * 100, i * 1000),
             Key = $"Key_{i}",
             P100 = $"P100_{i}",
             P111 = $"P111_{i}",
             CreateTime = DateTime.Now,
             Z001 = i,
             AT = AttributeTargets.Interface,
             AT2 = AttributeTargets.Delegate,
         });
     }
     var _table = JCoder.Db4Net.ORM.Orm.EntitiesToDataTable(_list);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    8)将实体对象转换为Dictionary
    using JCoder.Db4Net.ORM;
    
    var t = new T();
    
    // Property only.
    // 实体对象转换为Dictionary
    Dictionary _dict = JCoder.Db4Net.ORM.Orm.ObjectToDict(t);
    Dictionary _dict = t.ObjectToDict();
    
    // Attributes first
    // 实体对象转换为Dictionary
    Dictionary _dict = JCoder.Db4Net.ORM.Orm.EntityToDict(t);
    Dictionary _dict = t.EntityToDict();
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    Maven 基础教程系列
    VScode插件汇总
    前端发送axios请求报错Request failed with status code 500解决方案
    ASP.NET Core 产生连续 Guid
    365天挑战LeetCode1000题——Day 073 最大二叉树 II 二叉树的右视图 路径总和 II 删除二叉搜索树中的节点
    一个超好看的音乐网站设计与实现(HTML+CSS)
    服务器如何开启远程连接?
    基于机器学习建模的 XSS 攻击防范检测
    记内网http洪水攻击,导致网页无法访问一事
    【linux编程】linux文件IO的标准函数及其示例(fopen,fclose,freopen)
  • 原文地址:https://blog.csdn.net/Jack_Law/article/details/126407402