索引:
一.简介
1.适用范围:
MyDAL.dll 目前编译目标是 .Net Standard 2.0.3 ,可以在以下工程项目中引用并使用:
.Net Framework 4.6.1 及 next version.
.Net Core 2.0 及 next version.
Mono 5.4 及 next version.
Xamarin.ios 10.14 及 next version.
Xamarin.Mac 3.8 及 next version.
Xamarin.Android 8.0 及 next version.
UWP 10.0.16299 及 next version.
由于 .Net Standard 的跨平台开发特性,你可以在一下操作系统中部署及运行:
Windows 7 SP1 x64, x86 及 next version.
Windows 10 x64, x86 及 next version.
Windows Server 2008 R2 SP1+ x64, x86 及 next version.
Redhat Linux 7.3+ (包含 Cent OS Linux) x64 及 next version.
Fedora Linux 25+ x64 及 next version.
Debian Linux 8.7+ (包含 DeepIn Linux) x64 及 next version.
Ubuntu Linux 14.04+ x64, arm32[社区版] 及 next version.
OpenSUSE Linux 42.2+ x64 及 next version.
Tizen Linux 4+ arm32[三星版] 及 next version.
Mac OS X 10.12+ x64 及 next version.
2.功能特性简介:
底层代码采用 System.Reflection.Emit.Lightweight 类库使用 IL 的方式处理 Model 组装,性能刚刚的~
语法采用 System.Linq.Expressions 方式,强类型,对程序员编码非常友好~
由于本人精通 Java MyBatis ,所以缓存及数据关联由此借鉴而来~
由于本人精通 Ctrip Dal ,所以 Code First 及 DB First 由此借鉴而来~
二.安装
在 VS 中执行一下 package 命令:
1 PM> Install-Package MyDAL
三.快速使用
1.命名空间,只需:
1 using MyDAL;
2.准备好一个 IDbConnection 对象,目前只支持 MySQL,后续会支持 SQL Server / Oracle / Postgre SQL ... 等等:
1 private static IDbConnection GetOpenConnection(string name) 2 { 3 /* 4 * 5 */ 6 var conn = 7 new MySqlConnection($"Server=localhost; Database={name}; Uid=SkyUser; Pwd=Sky@4321;SslMode=none;") 8 .OpenDebug() // 全局 debug 配置, 生产环境不要开启 9 .OpenDB(); // 建议 每次新实例并打开,以获得更好的性能体验 10 return conn; 11 } 12 13 protected IDbConnection Conn 14 { 15 /* 16 * CREATE DATABASE `EasyDal_Exchange`; 17 */ 18 get { return GetOpenConnection("EasyDal_Exchange"); } 19 }
3.新增一条数据:
1 var m1 = new BodyFitRecord 2 { 3 Id = Guid.Parse("1fbd8a41-c75b-45c0-9186-016544284e2e"), 4 CreatedOn = DateTime.Now, 5 UserId = Guid.NewGuid(), 6 BodyMeasureProperty = "{xxx:yyy,mmm:nnn}" 7 }; 8 9 // 新建 10 var res1 = await Conn 11 .Creater<BodyFitRecord>() 12 .CreateAsync(m1); 13 Assert.True(res1 == 1); 14 15 var tuple1 = (XDebug.SQL, XDebug.Parameters,XDebug.SqlWithParams);
在 XDebug.SQL 中你可以看到生成的带参数化的 sql 语句~
在 XDebug.Parameters 中可以看到 参数名 及 参数名对应的参数值~
在 XDebug.SqlWithParams 中可以看到 ... ,其实就是懒人模式,直接 copy 就可以在 db 中执行了~
4.删除一条数据:
1 var Id = Guid.Parse("1fbd8a41-c75b-45c0-9186-016544284e2e"); 2 3 var res = await Conn 4 .Deleter<BodyFitRecord>() 5 .Where(it => it.Id == Id) 6 .DeleteAsync();
5.修改一条数据:
1 var res1 = await Conn 2 .Updater<BodyFitRecord>() 3 .Set(it => it.CreatedOn, DateTime.Now) 4 .Set(it => it.BodyMeasureProperty, "{xxx:yyy,mmm:nnn,zzz:aaa}") 5 .Where(it => it.Id == m.Id) 6 .UpdateAsync();
6.查询一条数据:
1 var res1 = await Conn 2 .Selecter<BodyFitRecord>() 3 .Where(it => it.Id == Guid.Parse("1fbd8a41-c75b-45c0-9186-016544284e2e")) 4 .QueryFirstOrDefaultAsync();
7.连接查询一组数据:
1 var res4 = await Conn 2 .Joiner<AspnetUsers, AspnetUserRoles, AspnetRoles>(out var user4, out var userRole4, out var role4) 3 .From(() => user4) 4 .InnerJoin(() => userRole4) 5 .On(() => user4.Id == userRole4.UserId) 6 .InnerJoin(() => role4) 7 .On(() => userRole4.RoleId == role4.Id) 8 .OrderBy(() => user4.UserName) 9 .ThenOrderBy(() => user4.AgentLevel, OrderByEnum.Asc) 10 .QueryListAsync<AspnetUsers>();
这个连接查询 产生的 sql 如下,是的你没看错,跟你手写 sql 是一模一样的:
1 select user4.`*` 2 from `AspNetUsers` as user4 3 inner join `AspNetUserRoles` as userRole4 on user4.`Id`=userRole4.`UserId` 4 inner join `AspNetRoles` as role4 on userRole4.`RoleId`=role4.`Id` 5 order by user4.`UserName` desc , user4.`AgentLevel` asc ;
8.与表对应的 Model 如下:
/* * CREATE TABLE `bodyfitrecord` ( * `Id` char(36) NOT NULL, * `CreatedOn` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), * `UserId` char(36) NOT NULL, * `BodyMeasureProperty` longtext, * PRIMARY KEY (`Id`) * ) ENGINE=InnoDB DEFAULT CHARSET=utf8 */ [XTable("BodyFitRecord")] public class BodyFitRecord { public Guid Id { get; set; } public DateTime CreatedOn { get; set; } public Guid UserId { get; set; } public string BodyMeasureProperty { get; set; } }
或者使用 .Net 内置的 TableAttribute 也可以:
1 /* 2 * CREATE TABLE `bodyfitrecord` ( 3 * `Id` char(36) NOT NULL, 4 * `CreatedOn` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), 5 * `UserId` char(36) NOT NULL, 6 * `BodyMeasureProperty` longtext, 7 * PRIMARY KEY (`Id`) 8 * ) ENGINE=InnoDB DEFAULT CHARSET=utf8 9 */ 10 11 [Table("BodyFitRecord")] 12 public class BodyFitRecord 13 { 14 public Guid Id { get; set; } 15 public DateTime CreatedOn { get; set; } 16 public Guid UserId { get; set; } 17 public string BodyMeasureProperty { get; set; } 18 }
如果你喜欢这个平台框架,别为了在 Github 上给点个 Star(星) 啊~~
蒙
2018-10-22 18:30 周一