Fast.Framework ORM 试用

打印 上一主题 下一主题

主题 834|帖子 834|积分 2502

简介

Fast.Framework 是一款基于 .NET 6 封装的轻量级ORM框架,支持多种数据库(SQL Server、Oracle、MySQL、PostgreSQL、SQLite)。
优点


  • 性能好
  • 使用简单
如何使用

1. 安装

NuGet搜索Fast.Framework并安装最新版本

2. 创建DbContext对象

DbContext是轻量级的,可以频繁创建,一个线程创建一个DbContext,不要跨线程使用。
  1. private IDbContext GetDbContext()
  2. {
  3.     IDbContext _db = new DbContext(new List<DbOptions>() {
  4.             new DbOptions()
  5.             {
  6.                 DbId = "1",
  7.                 DbType = DbType.MySQL,
  8.                 ProviderName = "MySqlConnector",
  9.                 FactoryName = "MySqlConnector.MySqlConnectorFactory,MySqlConnector",
  10.                 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;"
  11.             }
  12.         });
  13.     if (_printSql)
  14.     {
  15.         _db.Aop.DbLog = (sql, dp) =>
  16.         {
  17.             Console.WriteLine($"执行Sql:{sql}");
  18.             if (dp != null)
  19.             {
  20.                 foreach (var item in dp)
  21.                 {
  22.                     Console.WriteLine($"参数名称:{item.ParameterName} 参数值:{item.Value}");
  23.                 }
  24.             }
  25.         };
  26.     }
  27.     return _db;
  28. }
复制代码
实体类

实体类原生支持微软特性,兼容Entity Framework。
  1. using System.ComponentModel.DataAnnotations;
  2. using System.ComponentModel.DataAnnotations.Schema;
  3. namespace Models
  4. {
  5.     /// <summary>
  6.     /// 用户表
  7.     /// </summary>
  8.     [Serializable]
  9.     [Table("sys_user")]
  10.     public partial class SysUser
  11.     {
  12.         /// <summary>
  13.         /// 主键
  14.         /// </summary>
  15.         [Key]
  16.         [Column("id")]
  17.         public long Id { get; set; }
  18.         /// <summary>
  19.         /// 用户名
  20.         /// </summary>
  21.         [Column("user_name")]
  22.         public string UserName { get; set; }
  23.         /// <summary>
  24.         /// 用户姓名
  25.         /// </summary>
  26.         [Column("real_name")]
  27.         public string RealName { get; set; }
  28.         /// <summary>
  29.         /// 用户密码
  30.         /// </summary>
  31.         [Column("password")]
  32.         public string Password { get; set; }
  33.         /// <summary>
  34.         /// 备注
  35.         /// </summary>
  36.         [Column("remark")]
  37.         public string Remark { get; set; }
  38.         /// <summary>
  39.         /// 创建者ID
  40.         /// </summary>
  41.         [Column("create_userid")]
  42.         public string CreateUserid { get; set; }
  43.         /// <summary>
  44.         /// 创建时间
  45.         /// </summary>
  46.         [Column("create_time")]
  47.         public DateTime CreateTime { get; set; }
  48.         /// <summary>
  49.         /// 更新者ID
  50.         /// </summary>
  51.         [Column("update_userid")]
  52.         public string UpdateUserid { get; set; }
  53.         /// <summary>
  54.         /// 更新时间
  55.         /// </summary>
  56.         [Column("update_time")]
  57.         public DateTime? UpdateTime { get; set; }
  58.     }
  59. }
复制代码
.NET 6 依赖注入FastDbContext

配置文件
  1. "DbConfig": [
  2.   {
  3.     "DbId": 1,
  4.     "DbType": "MySQL",
  5.     "IsDefault": true,
  6.     "ProviderName": "MySqlConnector",
  7.     "FactoryName": "MySqlConnector.MySqlConnectorFactory,MySqlConnector",
  8.     "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;"
  9.   }
  10. ]
复制代码
注入代码
  1. //注入FastDbContext
  2. builder.Services.Configure<List<DbOptions>>(builder.Configuration.GetSection("DbConfig"));
  3. builder.Services.AddFastDbContext();
复制代码
循环插入
  1. await db.Ado.BeginTranAsync();
  2. foreach (SysUser user in userList)
  3. {
  4.     await db.Insert(user).ExceuteAsync();
  5. }
  6. await db.Ado.CommitTranAsync();
复制代码
批量插入
  1. await GetDbContext().Insert(userList).ExceuteAsync();
复制代码
循环修改
  1. await db.Ado.BeginTranAsync();
  2. foreach (SysUser user in userList)
  3. {
  4.     await db.Update(user).ExceuteAsync();
  5. }
  6. await db.Ado.CommitTranAsync();
复制代码
批量修改
  1. await GetDbContext().Update(userList).ExceuteAsync();
复制代码
条件查询
  1. Pagination pagination = new Pagination();
  2. pagination.Page = 10;
  3. pagination.PageSize = 200;
  4. var list = await _db.Query<SysUser>()
  5.     .Where(t => t.Id > 20 && t.RealName.Contains("测试"))
  6.     .OrderBy(t => t.CreateTime, "desc")
  7.     .OrderBy(t => t.Id).ToPageListAsync(pagination);
复制代码
分组聚合统计查询

这个写法很优雅。
  1. var list = await db.Query<BsOrderDetail>()
  2.     .LeftJoin<BsOrder>((d, o) => o.Id == d.OrderId)
  3.     .GroupBy((d, o) => new { o.Id, o.OrderTime, o.Remark })
  4.     .Having((d, o) => SqlFunc.Sum(d.Quantity * d.Price) > 1000)
  5.     .Select((d, o) => new
  6.     {
  7.         o.Id,
  8.         o.OrderTime,
  9.         o.Remark,
  10.         Amount = SqlFunc.Sum(d.Quantity * d.Price)
  11.     }).ToListAsync();
复制代码
性能测试

性能测试使用Winform测试
与其它ORM的对比请参考《ORM增删改查并发性能测试2
常规测试


并发查询


并发插入


结论

感觉还是非常快的,性能非常优异。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表