简单、易上手、高效、实用、灵活的 ORM 框架,代码友好,开源、易扩展;
nuget: Install-Package ASmile.ORM
目前支持,SQLIte 、SQLServer、MySql、Oracle 数据库;
不做铺垫,直接上示例,
首先,创建数据库对象:
DBContext db = new DBContextDebug(EmDbType.SQLServer, "Server=.;Database=asmile-examples;Trusted_Connection=True;");
新增 1, 使用代码生成器生成的 实体类新增
var r = db.Insert(new Test01 { ID = 1, Name = "张三", Age = 19, Birthday = new DateTime(1999, 9, 9), Balance = 8765.43m, Remark = "" }); PrintLog($"新增完成,\nSqlContent:\n{r.SqlContent}");
控制台结果(仅调试时使用):
新增 2 ,使用匿名对象
var r = db.Insert("Test01", new { ID = 2, Name = "李四", Age = 19, Birthday = new DateTime(1990, 5, 5), Balance = 9000, AddTime = DateTime.Now, Remark = "匿名对象新增" }); PrintLog($"新增完成,\nSqlContent:\n{r.SqlContent}");
新增 3 ,只对指定字段进行赋值,其它保持数据默认值,如果匿名对象或者实体类对象未对字段属性赋值,则会忽略该字段
var r = db.Insert( new Test01 { ID = 3, Name = "王五", //Age = 19, Birthday = new DateTime(1990, 5, 5), Balance = 9000, AddTime = DateTime.Now, Remark = "年龄未赋值" }); PrintLog($"新增完成,\nSqlContent:\n{r.SqlContent}");
新增 4 ,批量新增,目前批量新增的效率仅对 Sqlserver 与 MySql 有效,且非空字段必须赋值
List<Test01> addList = new List<Test01>(); for (int i = 0; i < 20; i++) { addList.Add(new Test01 { ID = 4 + i, Name = $"Name {i + 1}", Age = 22, Birthday = new DateTime(2000, 8, 8), Balance = 1999.56m, AddTime = DateTime.Now, Remark = "批量新增" }); } db.InsertBulk(addList); PrintLog($"批量新增完成");
修改 1 ,实体对象,主键更新
//将 ID = 5 的 姓名 该为 刘德华 var r = db.Update(new Test01 { ID = 5, Name = "刘德华", Remark = "" }); PrintLog($"修改完成,\nSqlContent:\n{r.SqlContent}");
修改 2,通过 lamda表达式条件修改
//通过 lamda表达式修改, var r = db.Update( new Test01 { Balance = 500, Name = "刘玄德", Remark = "lamda修改" }, s => s.Name == "Name 3"); PrintLog($"修改完成,\nSqlContent:\n{r.SqlContent}");
修改 3 ,SQL文本赋值方式更新
//SQL文本赋值方式更新 var r = db.UpdateByExpr<Test01>(s => s.Age < 20, "Balance = Balance + 250" ); PrintLog($"修改完成,\nSqlContent:\n{r.SqlContent}");
删除 1 ,按实体类,主键删除
//按实体类主键删除 var r = db.Delete(new Test01 { ID = 7 }); PrintLog($"删除完成,\nSqlContent:\n{r.SqlContent}");
删除 2 ,按 lamda 表示条件删除
//使用lamda表达式条件删除 var r = db.Delete<Test01>(s=>s.Name == "Name 10"); PrintLog($"删除完成,\nSqlContent:\n{r.SqlContent}");
查询 1 ,lamda 表达式,查询首行记录,返回实体对象
// lamda 表达式 查询首行数据 var r = db.Query<Test01>(s => s.ID == 5); var m = r.ToEntity(); PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
查询 2 ,lamda 表达式 查询列表
// lamda 表达式 查询列表 var r = db.Query<Test01>(s => s.WEx_Like(s.Name, "Name%") && s.ID < 16); var m = r.ToList(); PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
查询 3,Query对象 灵活查询
// Query对象 灵活查询 var query = db.CreateQuery<Test01>(); string name = "name%"; if (name != "") { query.WhereAnd(s => s.WEx_Like(s.Name, $"{name}")); } var r = db.Query(query); var m = r.ToList(); PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
查询 4 ,使用 Query 委托对象 灵活查询
// 使用 Query 委托对象 灵活查询 string name = "name%"; var r = db.Query<Test01>(query => { if (name != "") { query.WhereAnd(s => s.WEx_Like(s.Name, $"{name}")); } }); var m = r.ToList(); PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
查询 5 ,分页查询,与上述查询方法相同,赋值 参数 PageNo 与 PageSize
// 分页查询 string name = "name%"; var r = db.Query<Test01>(query => { query.PageNo = 2; query.PageSize = 6; if (name != "") { query.WhereAnd(s => s.WEx_Like(s.Name, $"{name}")); } query.OrderBy(s => s.Name); // 姓名排序 }); var m = r.ToList(); PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
如果是首页,sqlserver 会 简化sql 语句,如:
查询 6 使用sql文本查询(内置 sql 工具)
//使用sql文本查询(内置 sql 工具) var r = db.Query(sql => { int minAge = 15; int maxAge = 22; sql.AddSQLParam("select * from Test01 where age > {0} and age < {1}", minAge, maxAge); }); var rData = r.ToDataTable(); // 返回 DataTable 格式 var rList = r.ToList<Test01>(); // 这里 List 泛型可以使用任何类 PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
存储过程 1 ,匿名对象参数
//存储过程查询 List<Test01> rList = da.ExecProcedure("P_Query01", new { Name = "张三" }).ToList<Test01>(); PrintLog($"存储过程执行完成");
存储过程 2, 执行
//存储过程执行 da.ExecProcedure("P_Exec01", new { Name = "张三" }).ExecProc(); PrintLog($"存储过程执行完成");
存储过程 3, 执行带返回参数的过程
-- 带输出参数的过程
Create Proc P_Exec02 @Name varchar(20), @OutMsg varchar(50) = null out as delete from Test01 where [Name] = @Name set @OutMsg = '删除了,' + @Name
// 定义输出参数对象 class OutData { public string OutMsg { set; get; } // 输出参数 }
//执行存储过程并返回输出参数值 var retProc = da.ExecProcedure("P_Exec02", new { Name = "张三" }); OutData outData = new OutData(); retProc.ExecProc(outData); var msg = outData.OutMsg; PrintLog($"存储过程执行完成, {msg}");
存储过程 4,执行存储过程并返回输出参数值,匿名对象返回
// 执行存储过程并返回输出参数值,匿名对象返回 var retProc = da.ExecProcedure("P_Exec02", new { Name = "张三" }); retProc.ExecProc(new { OutMsg = "" }); var msg = retProc.OutObject.OutMsg; PrintLog($"存储过程执行完成, {msg}");
项目地址:https://gitee.com/zhcun/asmile-orm
来源链接:https://www.cnblogs.com/xtdhb/p/18663761/asmile-orm
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
暂无评论内容