|
Fast Framework
项目:https://gitee.com/China-Mr-zhong/Fast.Framework
一、前言
1、为了实现快速开发,省去编写大量Sql时间,更好的面向对象编程由此诞生了 Fast Framework
2、Fast Framework 是一个基于.NET 6.0 封装的轻量级 ORM 框架 支持数据库 SqlServer Oracle MySql PostgreSql Sqlite 由于底层使用System.Data.Common 抽象类封装 理论支持所有http://Ado.Net 实现的类库,差异部分可能需要额外处理。
3、框架
优点:体积小 流畅API 使用更加简单 性能高
缺点:不具备有自动建库建表迁移等复杂的功能 由于不同数据库差异较大 实现较为复杂 所以暂时不考虑实现
二、项目明细 (后缀为Test均为测试项目)
1、Fast.Framework
2、Fast.Framework.CustomAttribute
3、Fast.Framework.Extensions
4、Fast.Framework.Interfaces
5、Fast.Framework.Logging
6、Fast.Framework.Models
7、Fast.Framework.Utils
三、快速入门
1、手动创建
varoptions=newDefaultDbOptions()//数据选项{DbType=DbType.MySQL,ProviderName=&#34;MySqlConnector&#34;,FactoryName=&#34;MySqlConnector.MySqlConnectorFactory,MySqlConnector&#34;,ConnectionStrings=&#34;server=localhost;database=Test;user=root;pwd=123456789;port=3306;minpoolsize=3;maxpoolsize=100;connecttimeout=30;AllowLoadLocalInfile=True;&#34;};varado=newAdo<DefaultDbOptions>(options);//原生Adovardb=newDbContext<DefaultDbOptions>(ado);//数据库上下文2、依赖注入varbuilder=WebApplication.CreateBuilder(args);//正式项目请用配置文件注入,为了测试方便直接引用实现类库builder.Services.AddScoped<IAdo<DefaultDbOptions>,Ado<DefaultDbOptions>>();builder.Services.AddScoped<IDbContext<DefaultDbOptions>,DbContext<DefaultDbOptions>>();3、加载Json配置文件builder.Services.Configure<DefaultDbOptions>(configuration.GetSection(&#34;DbFactory:MySqlDb&#34;));4、Json 格式&#34;DbFactory&#34;:{&#34;MySQLDb&#34;:{&#34;DbType&#34;:&#34;MySQL&#34;,&#34;ProviderName&#34;:&#34;MySqlConnector&#34;,&#34;FactoryName&#34;:&#34;MySqlConnector.MySqlConnectorFactory,MySqlConnector&#34;,&#34;ConnectionStrings&#34;:&#34;server=localhost;database=Test;user=root;pwd=123456789;port=3306;minpoolsize=3;maxpoolsize=100;connecttimeout=30;&#34;},&#34;SQLServerDb&#34;:{&#34;DbType&#34;:&#34;SQLServer&#34;,&#34;ProviderName&#34;:&#34;System.Data.SqlClient&#34;,&#34;FactoryName&#34;:&#34;System.Data.SqlClient.SqlClientFactory,System.Data&#34;,&#34;ConnectionStrings&#34;:&#34;server=localhost;database=Test;user=sa;pwd=123456789;minpoolsize=3;maxpoolsize=100;connecttimeout=30;&#34;},&#34;OracleDb&#34;:{&#34;DbType&#34;:&#34;Oracle&#34;,&#34;ProviderName&#34;:&#34;Oracle.ManagedDataAccess.Client&#34;,&#34;FactoryName&#34;:&#34;Oracle.ManagedDataAccess.Client.OracleClientFactory,Oracle.ManagedDataAccess&#34;,&#34;ConnectionStrings&#34;:&#34;datasource=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ORCL)));userid=system;password=Oracle2022;minpoolsize=3;maxpoolsize=100;connecttimeout=30;&#34;},&#34;PostgreSQLDb&#34;:{&#34;DbType&#34;:&#34;PostgreSQL&#34;,&#34;ProviderName&#34;:&#34;Npgsql&#34;,&#34;FactoryName&#34;:&#34;Npgsql.NpgsqlFactory,Npgsql&#34;,&#34;ConnectionStrings&#34;:&#34;host=localhost;database=test;userid=postgres;pwd=123456789;port=5432;&#34;},&#34;SQLiteDb&#34;:{&#34;DbType&#34;:&#34;SQLite&#34;,&#34;ProviderName&#34;:&#34;System.Data.SQLite&#34;,&#34;FactoryName&#34;:&#34;System.Data.SQLite.SQLiteFactory,System.Data.SQLite&#34;,&#34;ConnectionStrings&#34;:&#34;datasource=mysqlite.db;pooling=true;&#34;}}5、Controller 构造方法注入已注册的DbContext对象namespaceFast.Framework.Web.Test.Controllers{[Route(&#34;api/[controller]/[action]&#34;)][ApiController]publicclassProductController:ControllerBase{///<summary>///数据库///</summary>privatereadonlyIDbContext<DefaultDbOptions>db;///<summary>///日志///</summary>privatereadonlyILogger<ProductController>logger;///<summary>///构造方法///</summary>///<paramname=&#34;db&#34;></param>publicProductController(ILogger<ProductController>logger,IDbContext<DefaultDbOptions>db){this.db=db;this.logger=logger;}}}6、示例#region增删改//实体对象插入{varresult=awaitdb.Insert(newProductModel(){ProductCode=&#34;1001&#34;,ProductName=&#34;测试产品1&#34;}).ExecuteAsync();Console.WriteLine(result);}//实体对象插入并返回自增ID仅支持SQLServerMysqlSqlite{varresult=awaitdb.Insert(newProductModel(){ProductCode=&#34;1001&#34;,ProductName=&#34;测试产品1&#34;}).ExecuteReturnIdentityAsync();Console.WriteLine(result);}//实体对象列表插入列表插入不支持批量返回自增ID{varlist=newList<ProductModel>();list.Add(newProductModel(){ProductCode=&#34;1001&#34;,ProductName=&#34;测试产品1&#34;});list.Add(newProductModel(){ProductCode=&#34;1002&#34;,ProductName=&#34;测试产品2&#34;});varresult=awaitdb.Insert(list).ExecuteAsync();Console.WriteLine(result);}//匿名对象插入必须使用As方法显示指定表名称{varresult=db.Insert(new{ProductCode=&#34;1001&#34;,ProductName=&#34;测试产品1&#34;}).As(&#34;Product&#34;).ExecuteAsync();Console.WriteLine(result);}//匿名对象列表插入必须使用As显示指定表名称{varlist=newList<object>();list.Add(new{ProductCode=&#34;1001&#34;,ProductName=&#34;测试产品1&#34;});list.Add(new{ProductCode=&#34;1002&#34;,ProductName=&#34;测试产品2&#34;});varresult=awaitdb.Insert(list).As(&#34;Product&#34;).ExecuteAsync();Console.WriteLine(result);}//实体无条件删除{varresult=awaitdb.Delete<ProductModel>().ExecuteAsync();Console.WriteLine(result);}//实体条件删除{varresult=awaitdb.Delete<ProductModel>().Where(w=>w.ProductId==1).ExecuteAsync();Console.WriteLine(result);}//父类对象删除{varresult=db.Delete<object>().As(&#34;Product&#34;).ExecuteAsync();Console.WriteLine(result);}//匿名对象条件删除{varobj=new{ProductCode=&#34;测试&#34;};varresult=awaitdb.Delete(obj).Where(w=>w.ProductCode==obj.ProductCode).As(&#34;Product&#34;).ExecuteAsync();Console.WriteLine(result);}//实体对象无条件更新{varresult=awaitdb.Update(newProductModel(){ProductCode=&#34;1001&#34;,ProductName=&#34;测试产品1&#34;}).ExecuteAsync();Console.WriteLine(result);}//实体对象条件更新{varresult=awaitdb.Update(newProductModel(){ProductCode=&#34;1001&#34;,ProductName=&#34;测试产品1&#34;}).Where(w=>w.ProductId==1).ExecuteAsync();Console.WriteLine(result);}//实体对象列表更新{varlist=newList<ProductModel>();for(inti=0;i<10;i++){list.Add(newProductModel(){ProductId=16395+i,ProductCode=$&#34;{16395+i}&#34;,ProductName=$&#34;{16395+i}&#34;});}varresult=awaitdb.Update(list).ExecuteAsync();Console.WriteLine(result);}//匿名对象无条件更新{varresult=awaitdb.Update(new{ProductCode=&#34;1001&#34;,ProductName=&#34;测试产品1&#34;}).As(&#34;Product&#34;).ExecuteAsync();Console.WriteLine(result);}//匿名对象条件更新{varresult=awaitdb.Update(new{ProductId=1,ProductCode=&#34;1001&#34;,ProductName=&#34;测试产品1&#34;}).Where(w=>w.ProductId==1).As(&#34;Product&#34;).ExecuteAsync();Console.WriteLine(result);}//匿名对象列表更新需要显示指定主键名称{varlist=newList<object>();for(inti=0;i<10;i++){list.Add(new{ProductId=16395+i,ProductCode=$&#34;{16395+i}&#34;,ProductName=$&#34;{16395+i}&#34;});}varresult=awaitdb.Update(list.ToList()).As(&#34;Product&#34;).Where(&#34;ProductId&#34;).ExecuteAsync();Console.WriteLine(result);}#endregion#region查//返回单个对象{vardata=awaitdb.Query<ProductModel>().Where(w=>w.ProductId==1).FirstAsync();}//返回列表{vardata=awaitdb.Query<ProductModel>().ToListAsync();}//返回字典{vardata=awaitdb.Query<ProductModel>().DictionaryAsync();}//返回字典列表{vardata=awaitdb.Query<ProductModel>().DictionaryListAsync();}//分页查询{vardata=awaitdb.Query<ProductModel>().ToPageListAsync(1,10);Console.WriteLine(JsonSerializer.Serialize(data.Data));//页数据Console.WriteLine($&#34;总数:{data.Count}&#34;);}//联表查询{vardata=awaitdb.Query<ProductModel>().InnerJoin<ProductCategoryModel>((a,b)=>a.CategoryId==b.CategoryId).ToListAsync();}//分组查询{vardata=awaitdb.Query<ProductModel>().GroupBy(g=>g.ProductName).Select(s=>new{Count=1.Count(),s.ProductName}).ToListAsync();}//排序查询{vardata=awaitdb.Query<ProductModel>().OrderBy(o=>o.ProductName).ToListAsync();}//动态条件表达式{varobj=new{ProductName=&#34;测试&#34;};varex=DynamicWhereExpression.Create<ProductModel>().AndIF(!string.IsNullOrWhiteSpace(obj.ProductName),a=>a.ProductName==obj.ProductName);vardata=awaitdb.Query<ProductModel>().Where(ex.Build()).ToListAsync();}//合并查询{varquery1=db.Query<ProductModel>().Where(w=>w.ProductId<100);varquery2=db.Query<ProductModel>().Where(w=>w.ProductId>100);vardata=awaitdb.UnionAll(query1,query2).ToListAsync();}#endregion#region批量复制建议数据量达到500以上使用这个方法仅支持SqlServerMySqlOraclePostgreSql{varlist=newList<ProductModel>();for(inti=1;i<=10000;i++){list.Add(newProductModel(){ProductCode=i.ToString(),ProductName=$&#34;测试{i}&#34;});}//因为ProductModel类还有其它属性所以需要使用Select扩展方法显示指定要导入的属性名称和表名称varresult=awaitdb.BigData().BulkCopyAsync(list.Select(s=>new{s.ProductCode,s.ProductName}),&#34;Product&#34;);Console.WriteLine(result);}#endregion方法太多 写文档是个体力活 更多请看源码https://gitee.com/China-Mr-zhong/Fast.Framework
转自:China-Mr-zhong
链接:http://cnblogs.com/China-Mr-zhong/p/15992962.html
|
|