博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个开源的ORM框架——Light.Data
阅读量:3524 次
发布时间:2019-05-20

本文共 5003 字,大约阅读时间需要 16 分钟。

目录


介绍

Light.Data 是一个基于dotnet standard 2.0的轻量级ORM框架  ,通过实体模型类  Attribute 或配置文件关联数据表。使用核心类  DataContext 在表上进行  CURD 操作。

PM> Install-Package Light.Data

支持的数据库

数据库

介绍

SqlServer

需要安装  nuget 安装  Light.Data.Mssql 库,支持SqlServer 2008或以上版本

Mysql

需要安装  nuget 安装  Light.Data.Mysql 库,支持Mysql5.5或以上版本

Postgre

需要安装  nuget 安装  Light.Data.Postgre 库,支持PostgreSQL9.3或以上版本

 

  • 文件::
  • Github:

如何使用

数据库配置

{  "lightData": {      "connections": [          {             "name": "mssql_db",             "connectionString": "...",             "providerName": "Light.Data.Mssql.MssqlProvider, Light.Data.Mssql"          },          {             "name": "mysql_db",             "connectionString": "...",             "providerName": "Light.Data.Mysql.MysqlProvider, Light.Data.Mysql"           }       ]    }}

使用方法

// direct useDataContext context = new DataContext("mssql");// create subclasspublic class MyDataContext : DataContext{    public MyDataContext() : base("mssql")    {    }}// create subclass with optionspublic class MyDataContext : DataContext{    public MyDataContext(DataContextOptions
options) : base(options) { }}// direct config connect string and params (IServiceCollection)service.AddDataContext
(builder => { builder.UseMssql(connectionString); builder.SetTimeout(2000); builder.SetVersion("11.0");}, ServiceLifetime.Transient);// use default configuration file to config (IServiceCollection)service.AddDataContext
(DataContextConfiguration.Global, config => { config.ConfigName = "mssql";}, ServiceLifetime.Transient);

对象映射

[DataTable("Te_User", IsEntityTable = true)]public class TeUser{    ///     /// Id    ///     /// 
[DataField("Id", IsIdentity = true, IsPrimaryKey = true)] public int Id { get; set; } /// /// Account /// ///
[DataField("Account")] public string Account { get; set; } /// /// Telephone /// ///
[DataField("Telephone", IsNullable = true)] public string Telephone { get; set; } ....}

子表映射

在派生类TeUserAndExtend中添加类型为TeUserExtend的公共属性Extend,并添加特性RelationFieldAttribute在查询TeUserAndExtend中,还将检测关联的TeUserExtend 数据。并且还支持一对多。

[DataTable("Te_UserExtend", IsEntityTable = true)]public class TeUserExtend{    [DataField("Id", IsIdentity = true, IsPrimaryKey = true)]    public int Id    {        get;        set;    }    [DataField("MainId")]    public int MainId    {        get;        set;    }        [DataField("Data", IsNullable = true)]    public string Data    {        get;        set;    }}public class TeUserAndExtend : TeUser{    [RelationField("Id", "MainId")]    public TeUserExtend Extend    {        get;        set;    }}

基本操作

  • 基本CURD
  • 批量CUD
  • 支持事务处理
  • 支持数据字段默认值和自动时间戳
  • 支持数据字段读写控制
  • 查询结果指定类或匿名类输出
  • 查询结果直接插入数据表
var context = new DataContext();// query single datavar item = context.Query
().Where(x => x.Id == 10).First();// query collection datasvar list = context.Query
().Where(x => x.Id > 10).ToList();// create datevar user = new TeUser() { Account = "foo", Password = "bar"};context.Insert(user);// update datauser.Password = "bar1";context.Update(user);// delete datacontext.Delete(user);

数据聚合

  • 单列数据直接聚合
  • 多列数据分组聚合
  • 格式化分组字段
  • 聚合数据直接插入数据表
// basicvar list = context.Query
() .Where (x => x.Id >= 5) .GroupBy (x => new LevelIdAgg () { LevelId = x.LevelId, Data = Function.Count () }) .ToList ();// date formatvar list = context.Query
() .GroupBy (x => new RegDateFormatAgg () { RegDateFormat = x.RegTime.ToString("yyyy-MM-dd"), Data = Function.Count () }) .ToList ();

Join表查询

  • 多表连接,支持内连接,左连接和右连接
  • 支持查询结果和聚合数据连接在一起
  • 连接查询结果指定类或匿名类输出
  • 连接查询结果直接插入数据表
// inner joinvar join = context.Query
() .Join
((x,y) => x.Id == y.Id);// aggregate data join entity table var join = context.Query
() .GroupBy(x => new { MId = x.MId, Count = Function.Count(), }) .Join
((x, y) => x.MId == y.Id);

执行SQL

  • 直接使用SQL和存储过程
  • 支持对象参数
  • 查询结果指定类或匿名类输出
  • 存储过程支持使用输出参数
// basic parametervar sql = "update Te_User set NickName=@P2 where Id=@P1";var ps = new DataParameter[2];ps[0] = new DataParameter("P1", 5);ps[1] = new DataParameter("P2", "abc");var executor = context.CreateSqlStringExecutor(sql, ps);var ret = executor.ExecuteNonQuery();// object parametervar sql = "update Te_User set NickName={nickname} where Id={id}";var executor = context.CreateSqlStringExecutor(sql, new { nickname = "abc", id = 5 });var ret = executor.ExecuteNonQuery();

单元测试

该项目使用xUnit进行单元测试,测试代码地址:

每个数据库有超过300组测试,包含1,000个案例,涵盖了大部分代码。

性能测试

目前只在同一台计算机上使用EF Core,为LinuxDocker Sql Server 2017做简单的CURD性能测试代码地址

1000CUD和单个数据查询

共有5轮,每轮1000CUD1000次数据查询

EF测试结果

Light.Data测试结果

从比较来看,查询性能几乎相同,插入性能Light.Data略胜一筹,批量更新也略胜一筹。

本文仅作简要介绍,您可以参考文档和测试用例以了解具体的使用方法。

 

原文地址:

转载地址:http://sizhj.baihongyu.com/

你可能感兴趣的文章
SQL 约束(二)
查看>>
SQL ALTER用法(三)
查看>>
SQL where子句及查询条件语句(六)
查看>>
SQL 连接JOIN(九)
查看>>
linux VM虚拟机可以ping通主机,但主机无法ping通虚拟机
查看>>
linux 错误码
查看>>
C++ 中Struct与typedef struct总结
查看>>
WNetAddConnection2调用失败,错误码1200/1312
查看>>
POI读写Excel的基本使用
查看>>
淘宝网站的架构演进
查看>>
设置zookeeper开机自启动流程
查看>>
CentOS安装mysql5.7的教详细流程
查看>>
项目整合微信扫码登录功能
查看>>
分布式文件系统FastDfs的搭建
查看>>
Springboot项目利用Java客户端调用FastDFS
查看>>
全文检索工具elasticsearch的安装和简单介绍
查看>>
利用Kibana学习全文检索工具elasticsearch
查看>>
SpringBoot在Test测试类或自定义类中通过@Autowired注入为null
查看>>
使用docker搭建YAPI服务
查看>>
西南科技大学OJ题 邻接表到邻接矩阵1056
查看>>