Fast.Framework ORM 试用
简介
Fast.Framework 是一款基于 .NET 6 封装的轻量级ORM框架,支持多种数据库(SQL Server、Oracle、MySQL、PostgreSQL、SQLite)。
优点
- 性能好
- 使用简单
如何使用
1. 安装
NuGet搜索Fast.Framework并安装最新版本
2. 创建DbContext对象
DbContext是轻量级的,可以频繁创建,一个线程创建一个DbContext,不要跨线程使用。
private IDbContext GetDbContext()
{
IDbContext _db = new DbContext(new List<DbOptions>() {
new DbOptions()
{
DbId = "1",
DbType = DbType.MySQL,
ProviderName = "MySqlConnector",
FactoryName = "MySqlConnector.MySqlConnectorFactory,MySqlConnector",
ConnectionStrings = "Data Source=localhost;Port=3306;User ID=root;Password=123456;Initial Catalog=fast_framework_test;Charset=utf8mb4;SslMode=none;Allow User Variables=True;connection timeout=600;"
}
});
if (_printSql)
{
_db.Aop.DbLog = (sql, dp) =>
{
Console.WriteLine($"执行Sql:{sql}");
if (dp != null)
{
foreach (var item in dp)
{
Console.WriteLine($"参数名称:{item.ParameterName} 参数值:{item.Value}");
}
}
};
}
return _db;
}
实体类
实体类原生支持微软特性,兼容Entity Framework。
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Models
{
/// <summary>
/// 用户表
/// </summary>
[Serializable]
[Table("sys_user")]
public partial class SysUser
{
/// <summary>
/// 主键
/// </summary>
[Key]
[Column("id")]
public long Id { get; set; }
/// <summary>
/// 用户名
/// </summary>
[Column("user_name")]
public string UserName { get; set; }
/// <summary>
/// 用户姓名
/// </summary>
[Column("real_name")]
public string RealName { get; set; }
/// <summary>
/// 用户密码
/// </summary>
[Column("password")]
public string Password { get; set; }
/// <summary>
/// 备注
/// </summary>
[Column("remark")]
public string Remark { get; set; }
/// <summary>
/// 创建者ID
/// </summary>
[Column("create_userid")]
public string CreateUserid { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column("create_time")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 更新者ID
/// </summary>
[Column("update_userid")]
public string UpdateUserid { get; set; }
/// <summary>
/// 更新时间
/// </summary>
[Column("update_time")]
public DateTime? UpdateTime { get; set; }
}
}
.NET 6 依赖注入FastDbContext
配置文件
"DbConfig": [
{
"DbId": 1,
"DbType": "MySQL",
"IsDefault": true,
"ProviderName": "MySqlConnector",
"FactoryName": "MySqlConnector.MySqlConnectorFactory,MySqlConnector",
"ConnectionStrings": "Data Source=localhost;Port=3306;User ID=root;Password=123456;Initial Catalog=fast_framework_test;Charset=utf8mb4;SslMode=none;Allow User Variables=True;connection timeout=600;"
}
]
注入代码
//注入FastDbContext
builder.Services.Configure<List<DbOptions>>(builder.Configuration.GetSection("DbConfig"));
builder.Services.AddFastDbContext();
循环插入
await db.Ado.BeginTranAsync();
foreach (SysUser user in userList)
{
await db.Insert(user).ExceuteAsync();
}
await db.Ado.CommitTranAsync();
批量插入
await GetDbContext().Insert(userList).ExceuteAsync();
循环修改
await db.Ado.BeginTranAsync();
foreach (SysUser user in userList)
{
await db.Update(user).ExceuteAsync();
}
await db.Ado.CommitTranAsync();
批量修改
await GetDbContext().Update(userList).ExceuteAsync();
条件查询
Pagination pagination = new Pagination();
pagination.Page = 10;
pagination.PageSize = 200;
var list = await _db.Query<SysUser>()
.Where(t => t.Id > 20 && t.RealName.Contains("测试"))
.OrderBy(t => t.CreateTime, "desc")
.OrderBy(t => t.Id).ToPageListAsync(pagination);
分组聚合统计查询
这个写法很优雅。
var list = await db.Query<BsOrderDetail>()
.LeftJoin<BsOrder>((d, o) => o.Id == d.OrderId)
.GroupBy((d, o) => new { o.Id, o.OrderTime, o.Remark })
.Having((d, o) => SqlFunc.Sum(d.Quantity * d.Price) > 1000)
.Select((d, o) => new
{
o.Id,
o.OrderTime,
o.Remark,
Amount = SqlFunc.Sum(d.Quantity * d.Price)
}).ToListAsync();
性能测试
性能测试使用Winform测试
与其它ORM的对比请参考《ORM增删改查并发性能测试2》
常规测试
并发查询
并发插入
结论
感觉还是非常快的,性能非常优异。
Fast.Framework ORM 试用的更多相关文章
- Fast.Framework ORM 于中秋节后 正式开源
Fast Framework 作者 Mr-zhong 开源项目地址 https://github.com/China-Mr-zhong/Fast.Framework QQ交流群 954866406 欢 ...
- 基于NET 6.0 封装的 Fast.Framework
Fast Framework 项目地址 https://gitee.com/China-Mr-zhong/Fast.Framework Author Mr-zhong Wechat 850856667 ...
- Git.Framework 框架随手记--ORM新增操作
本篇主要记录具体如何新增数据,废话不多说,开始进入正文. 一. 生成工程结构 上一篇已经说到了如何生成工程结构,这里在累述一次. 1. 新建项目总体结构 使用VS新建项目结构,分层结构可以随意.我们使 ...
- Git.Framework 框架随手记--ORM项目工程
前面已经简单介绍过了该框架(不一定是框架),本文开始重点记录其使用过程.可能记录的内容不是太详尽,框架也可能非常烂,但是里面的代码句句是实战项目所得.本文非教唆之类的文章,也非批判之类的文章,更不是炫 ...
- [最新].NET Core ORM 开源项目一览,持续更新
截至2019-05-08共收集27个 .NET Core ORM 开源项目,38个 .NET ORM 开源项目. .NET Core ORM 开源项目收集地址:https://github.com/o ...
- ORM增删改查并发性能测试
这两天在对一些ORM进行性能测试(涉及SqlSugar.FreeSql.Fast.Framework.Dapper.LiteSql),测试用的是Winform程序,别人第一眼看到我的程序,说,你这测试 ...
- ORM增删改查并发性能测试2
前言 上一篇<ORM增删改查并发性能测试>出现了点小失误,有的输出SQL日志的代码没有禁用,数据库连接字符串可能有问题.统一环境,统一代码后,重新写一篇. 这次重点是并发性能测试,真不是为 ...
- 吉特仓库管理系统-ORM框架的使用
最近在园子里面连续看到几篇关于ORM的文章,其中有两个印象比较深刻<<SqliteSugar>>,另外一篇文章是<<我的开发框架之ORM框架>>, 第一 ...
- Git.Framework 框架随手记--存储过程简化
在很多的ORM中对存储过程操作都是一个棘手的地方,因为存储过程是一段预编译的代码,其中可以包含很多处理过程.在Git.Framework中也同样存在这样的问题,目前没有能力解决这个问题.但是对于存储过 ...
随机推荐
- GaussDB(for MySQL) :Partial Result Cache,通过缓存中间结果对算子进行加速
摘要:华为云数据库高级内核技术专家详解GaussDB(for MySQL)Partial Result Cache特性,如何通过缓存中间结果对算子进行加速? 本文分享自华为云社区<GaussDB ...
- centos7解决无法上网的问题
问题:centos7出现无法进行联网,如下图所示,执行该命令: ping qq.com 出现如下情况: 解决方法: 首先cd到需要修改文件的所在目录下: [root@localhost ~]# cd ...
- [APIO2008]DNA 题解
题目链接 首先呢,看到 A C G T 对应不同的权值,第一步就是把字母转换成数字. 我们分别对 A->1 C->2 G->3 T->4 进行标号,之后方便 \(\text{d ...
- 字符输出流_Writer类&FileWriter类介绍和字符输出流的基本使用_写出单个字符到文件
java.io.Writer:字符输出流,是所有字符输出流的最顶层的父类,是一个抽象类 共性的成员方法: - void write(int c) 写入单个字符 - void write(char[] ...
- java。多态
package Demo.oop.APP.Demo05; public class application { public static void main(String[] args) { //一 ...
- APISpace 日出日落API接口 免费好用
日出是每个早晨太阳的一半从地平线探出头的时刻,也指太阳穿过地平线的整个过程及其伴随的大气效应.日落是指由于地球自转导致太阳每天从地平线消失的时刻.从赤道上看,春分和秋分时,太阳从正西方落下.从中纬度地 ...
- 2022-7-11 javascript学习 第七组 刘昀航
JavaScript是什么? 编程语言,脚本语言,依赖于某种容器来运行. JS是运行在浏览器上的,可以帮助我们去控制页面. Vue.js react.js jquery.js an ...
- jdbc 01: 连接mysql,并实现数据插入
jdbc连接mysql,并实现数据插入 package com.examples.jdbc.o1_连接与插入; import java.sql.*; /* jdbc数据库连接六步 */ public ...
- Java异步记录日志-2022新项目
一.业务场景 web项目开发中,经常会有的一个操作是记录请求日志,比如记录请求的IP地址,记录请求的路径,记录请求的参数等等. 每个系统都会根据自己的需要来记录一些请求相关的日志.一般会将记录的日志信 ...
- HTML js 复习
<a href="#top" target="_self">返回顶部</a> 返回页面顶部代码 打印js对象方法 function wr ...