typora-copy-images-to: static


ydal

项目框架介绍

可能是东半球最好netcore ORM框架,目前暂时支持mysql、mssql,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码,开箱即用。

It may be the best NETCORE ORM framework in the eastern hemisphere. At present, it temporarily supports MySQL and MSSQL, and its core design goal is to open

特此声明

重复造轮子仅为netcore开源贡献自己一份力量,让用户在orm框架上多一份选择,可以免费商用并提供永久技术支持

使用步骤

安装dll

Install-Package ydal
Install-Package YDal.CodeGenerator

也可以使用nuget管理客户端进行安装

注入代码

 public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(); services
.AddDal()//类库核心功能
.AddDalCodeGenerator();//代码生成器专用,生成框架代码之后请注释这段代码AddDalCodeGenerator;
}

生成框架代码配置

{
//连接数据库专用
"ConnectionStrings": {
"DefaultConnection": "server=localhost;uid=root;pwd=123456;port=3306;database=test;sslmode=Preferred;",
"DbType": "MySQL" //无此配置,默认mysql
}
//mssql连接字符串 Data Source=192.168.1.110;Initial Catalog=test;Persist Security Info=True;User ID=test;Password=123456;MultipleActiveResultSets=True;App=EntityFramework;
//代码生成器插件使用
"DbOption": {
"ConnectionString": "server=localhost;uid=root;pwd=123456;port=3306;database=test;sslmode=Preferred;",
"DbType": "MySQL", //mssql mysql
"Author": "作者名称",
"OutputPath": "F:\\app\\y-dal\\cs", //生成代码路径
"ModelsNamespace": "Samples.Models", //实体命名空间
"IRepositoryNamespace": "Samples.Repository", //仓储接口命名空间
"RepositoryNamespace": "Samples.Repository.Impl", //仓储命名空间
"IServicesNamespace": "Samples.Services", //服务接口命名空间
"ServicesNamespace": "Samples.Services.Impl", //服务命名空间
"Tables":"" //指定表名生成,多个用逗号隔开,为空全部
}
}

测试

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Samples.Models;
using Samples.Repository; namespace Samples.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private IdemoRepository DemoRepostiory1; private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
}; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger, IdemoRepository DemoRepostiory)
{
_logger = logger;
this.DemoRepostiory1 = DemoRepostiory;
} [HttpGet]
public IEnumerable<WeatherForecast> Get()
{
DemoRepostiory1.Insert(new demo { UserName = "明哥富婆" }); Console.WriteLine($"{DemoRepostiory1.GetHashCode()}");
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
}
}

API使用

支持以下2种写法,根据自身需要选择其中一种即可,以下所有代码查看源码UnitTest项目

lambda

xxxRepository.Where(f=>f.Id==123);

Linq:

from a in xxxRepository

1、where (条件查询)

①简单使用
var order1 = _orderdetailRepository.Entities.Where(f => f.itemid == 123)
.Select(f => new
{
f.itemid
})
.FirstOrDefault(); var order1 = _orderdetailRepository.Filter(f => f.itemid == 123); 排序从小到大
var order1 = _orderdetailRepository.Filter(f => f.orderid == 1, p => p.OrderBy(f => f.Id)); 排序从大到小
var order1 = _orderdetailRepository.Filter(f => f.orderid == 1, p => p.OrderByDescending(f => f.Id)); 多个字段排序
var order1 = _orderdetailRepository.Filter(f => f.orderid == 1, p => p.OrderBy(f => f.Id).ThenBy(f=>f.itemid)); ②多个条件
var order1 = _orderdetailRepository.Filter(f => f.itemid == 123 && f.orderid == 1); ③多个表关联
var order1 = from a in _orderdetailRepository.Entities
join b in _ordermasterRepository.Entities on a.orderid equals b.Id
select new
{
b.paytime,
a.totalprice,
a.itemid,
};

2、select(映射)

①匿名对象
var order1 = _orderdetailRepository.Entities.Where(f => f.itemid == 123)
.Select(f => new
{
f.itemid
})
.FirstOrDefault(); ②自定义对象
public class Test
{
public string itemname04 { get; set; }
public int itemid04 { get; set; }
}
var order1 = _orderdetailRepository.Entities.Where(f => f.itemid == 123)
.Select(f => new test
{
f.itemid
})
.FirstOrDefault();

3、update (更新)

①简单更新(不推荐)
var order1 = _orderdetailRepository.FilterWithTracking(f => f.itemid == 123);
order1.totalprice = 30.01M;
var r= _orderdetailRepository.Update(order1); ②sql语法糖更新(强烈推荐)
var r=_orderdetailRepository.Update(f => f.itemid == 123, f => new Orderdetail
{
totalprice = 32.01M
});

4、delete (删除)

① 简单删除(不推荐)
var order1 = _orderdetailRepository.FilterWithTracking(f => f.itemid == 9990);
var r = _orderdetailRepository.Delete(order1); ② sql语法糖更新(强烈推荐)
var r = _orderdetailRepository.Delete(f => f.itemid == 9990);

5、insert (插入)

①、简单插入
var r = _orderdetailRepository.Insert(new Orderdetail
{
itemid = 111115,
itemname = "测试insert",
totalprice = 111,
orderid = 1,
}); ② 批量插入
var itemId = new Random().Next(100000, 999999);
var list = new List<Orderdetail>();
for (int i = 0; i < 10; i++)
{
list.Add(new Orderdetail
{
itemid = itemId,
itemname = "测试插入",
totalprice = 111,
orderid = 1,
});
};
var r = _orderdetailRepository.Insert(list);

6、page分页 (分页)

①无条件单表分页
var page = new PagingInfo
{
PageIndex = 2, //当前页
PageSize = 5,//每页条数
};
var result = _orderdetailRepository.GetListByPage(page);
var totalCount = result.TotalCount;//返回总页数 ② 有条件单表分页
var page = new PagingInfo
{
PageIndex = 2, //当前页
PageSize = 5,//每页条数
};
var result = _orderdetailRepository.Entities.Where(f => f.Id > 10).Paging(page); ③ 支持匿名对象分页
var page = new PagingInfo
{
PageIndex = 1, //当前页
PageSize = 5,//每页条数
};
var result = _orderdetailRepository.Entities
.Where(f => f.Id > 10)
.Select(p => new
{
p.itemid,
p.itemname
})
.Paging(page); ④ 支持自定义对象分页
var page = new PagingInfo
{
PageIndex = 1, //当前页
PageSize = 5,//每页条数
};
var result = _orderdetailRepository.Entities
.Where(f => f.Id > 10)
.Select(p => new Test
{
itemid04 = p.itemid,
itemname04 = p.itemname
})
.Paging(page); ⑤多表分页
var page = new PagingInfo
{
PageIndex = 2, //当前页
PageSize = 5,//每页条数
};
var query = from a in _orderdetailRepository.Entities
join b in _ordermasterRepository.Entities on a.orderid equals b.Id
select new
{
b.paytime,
a.totalprice,
a.itemid,
};
var result = query.Paging(page);

问题反馈

可以直接进群反馈:916213430

netcore.ydal可能是东半球最好ORM框架的更多相关文章

  1. Mego(03) - ORM框架的新选择

    前言 从之前的两遍文章可以看出ORM的现状. Mego(01) - NET中主流ORM框架性能对比 Mego(02) - NET主流ORM框架分析 首先我们先谈下一个我们希望的ORM框架是什么样子的: ...

  2. Orm框架(AntOrm,Ktorm)在mac机器上如何使用代码生成

    Orm框架介绍 AntOrm 是我维护的一个开源csharp -netcore 项目 Ktorm 是一个大神开源的kotlin项目 由于我工作上都用到了,为了提高工作效率 我写了一个mac端工具帮助快 ...

  3. EF 太重,MyBatis 太轻,ORM 框架到底怎么选 ?

    以 EF 为代表的基于 Linq 的 ORM 框架总是 很重. 他们的功能早已超出了一个 ORM 的范畴, ORM 是 Object Relational Mapping ,从名字上看,其初衷是将 数 ...

  4. ORM框架对分表分库的实现

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  5. 记SqlSugar ORM框架之找不到主键问题

    前端时间在.NetCore项目中使用SqlSugar ORM框架(引用sqlSugarCore依赖包)的时候遇到了一个奇葩问题:对表进行数据更新操作的时候,报错 “ You cannot have n ...

  6. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  7. 最好的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

  8. [Android]Android端ORM框架——RapidORM(v2.1)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/6020412.html [Android]Android端ORM ...

  9. [Android]Android端ORM框架——RapidORM(v2.0)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5626716.html [Android]Android端ORM ...

随机推荐

  1. PHP代码审计分段讲解(14)

    30题利用提交数组绕过逻辑 本篇博客是PHP代码审计分段讲解系列题解的最后一篇,对于我这个懒癌患者来说,很多事情知易行难,坚持下去,继续学习和提高自己. 源码如下: <?php $role = ...

  2. 前端性能测试(H5性能测试)

    前端性能调优方法同样适用于H5. 1.H5前端性能知识点 学习前端性能,必须对HTTP协议有所了解. 1.1 浏览器渲染引擎 浏览器是Html解析和页面最终展示的工具. 浏览器的主要功能:将用户选择的 ...

  3. Python Flask后端异步处理(三)

    前一篇博文我们已经将基础知识和环境配置进行了介绍:https://www.cnblogs.com/Cl0ud/p/13192925.html,本篇博文在实际应用场景中使用Celery,对Flask后端 ...

  4. .NET 面试题汇总(带答案)

    1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么? 答:尽可能用约束(包括CHECK.主键.唯一键.外键.非空字段)实现,这种方式的效率最好:其次用触发器,这种方式可以保证无论何 ...

  5. 本文帮你在 Unix 下玩转 C 语言

    shell是一种特殊的应用程序(命令行解释器),他为运行其他应用程序提供了一个接口. posix规范了操作系统是什么样 每个进程都有一个工作目录(又叫当前目录),相对路径都是从工作目录开始解释. Ct ...

  6. 八、TestNG忽略测试

    一个TestNG  测试类中如果有的方法不想测试可以使用 enabled 属性 enabled = false  该方法不参与测试 enabled = true  该方法参与测试 @Test 不写en ...

  7. mysql 8.0 主从复制配置

    背景: 主库: 192.168.211.128 从库: 192.168.211.129 一.关闭防火墙 [root@node01 ~]# systemctl disable firewalld [ro ...

  8. oracle DG查看延时时间

    oracle DG查看延时时间 SQL> select value from v$dataguard_stats where name='apply lag'; 例如: SQL> sele ...

  9. PB级大规模Elasticsearch集群运维与调优实践【>>戳文章免费体验Elasticsearch服务30天】

    [活动]Elasticsearch Service免费体验馆>> Elasticsearch Service自建迁移特惠政策>>Elasticsearch Service新用户 ...

  10. 工具-效率工具-listary快速打开文件,win+R使用(99.1.1)

    @ 目录 1.使用WIN+R打开软件 2.使用listary软件 1.使用WIN+R打开软件 添加环境变量 找到需要打开应用的目录 如我的桌面(C:\Users\Public\Desktop) 添加p ...