ToB企服应用市场:ToB评测及商务社交产业平台

标题: ASmile-ORM “蝇”量级数据库框架先容及示例 [打印本页]

作者: 万有斥力    时间: 2025-1-12 00:31
标题: ASmile-ORM “蝇”量级数据库框架先容及示例
简单、易上手、高效、实用、灵活的 ORM 框架,代码友好,开源、易扩展;
nuget: Install-Package ASmile.ORM
目前支持,SQLIte 、SQLServer、MySql、Oracle 数据库;
不做铺垫,直接上示例,
首先,创建数据库对象:  
  1. DBContext db = new DBContextDebug(EmDbType.SQLServer, "Server=.;Database=asmile-examples;Trusted_Connection=True;"); 
复制代码
 
新增  1, 使用代码生成器生成的 实体类新增
  1. var r =
  2. db.Insert(new Test01
  3. {
  4.     ID = 1,
  5.     Name = "张三",
  6.     Age = 19,
  7.     Birthday = new DateTime(1999, 9, 9),
  8.     Balance = 8765.43m,
  9.     Remark = ""
  10. });
  11. PrintLog($"新增完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 
控制台结果(仅调试时使用):

 
 新增 2 ,使用匿名对象
  1. var r =
  2. db.Insert("Test01",
  3. new
  4. {
  5.     ID = 2,
  6.     Name = "李四",
  7.     Age = 19,
  8.     Birthday = new DateTime(1990, 5, 5),
  9.     Balance = 9000,
  10.     AddTime = DateTime.Now,
  11.     Remark = "匿名对象新增"
  12. });
  13. PrintLog($"新增完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 

 
 新增 3 ,只对指定字段举行赋值,别的保持数据默认值,如果匿名对象或者实体类对象未对字段属性赋值,则会忽略该字段
  1. var r =
  2. db.Insert(
  3. new Test01
  4. {
  5.     ID = 3,
  6.     Name = "王五",
  7.     //Age = 19,
  8.     Birthday = new DateTime(1990, 5, 5),
  9.     Balance = 9000,
  10.     AddTime = DateTime.Now,
  11.     Remark = "年龄未赋值"
  12. });
  13. PrintLog($"新增完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 


 
新增 4 ,批量新增,目前批量新增的效率仅对 Sqlserver 与 MySql 有效,且非空字段必须赋值
  1. List<Test01> addList = new List<Test01>();
  2. for (int i = 0; i < 20; i++)
  3. {
  4.     addList.Add(new Test01
  5.     {
  6.         ID = 4 + i,
  7.         Name = $"Name {i + 1}",
  8.         Age = 22,
  9.         Birthday = new DateTime(2000, 8, 8),
  10.         Balance = 1999.56m,
  11.         AddTime = DateTime.Now,
  12.         Remark = "批量新增"
  13.     });
  14. }
  15. db.InsertBulk(addList);
  16. PrintLog($"批量新增完成");
复制代码
 

 
修改 1 ,实体对象,主键更新
  1. //将 ID = 5 的 姓名 该为 刘德华
  2. var r =
  3. db.Update(new Test01
  4. {
  5.     ID = 5,
  6.     Name = "刘德华",
  7.     Remark = ""
  8. });
  9. PrintLog($"修改完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 

 
修改 2,通过 lamda表达式条件修改
  1. //通过 lamda表达式修改,
  2. var r =
  3. db.Update(
  4. new Test01
  5. {
  6.     Balance = 500,
  7.     Name = "刘玄德",
  8.     Remark = "lamda修改"
  9. }, s => s.Name == "Name 3");
  10. PrintLog($"修改完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 

 
修改 3 ,SQL文本赋值方式更新
  1. //SQL文本赋值方式更新
  2. var r =
  3. db.UpdateByExpr<Test01>(s => s.Age < 20,
  4. "Balance = Balance + 250"
  5. );
  6. PrintLog($"修改完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 

 
 删除 1 ,按实体类,主键删除
  1. //按实体类主键删除
  2. var r =
  3. db.Delete(new Test01
  4. {
  5.     ID = 7
  6. });
  7. PrintLog($"删除完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 

 
 删除 2 ,按 lamda 表示条件删除
  1. //使用lamda表达式条件删除
  2. var r =
  3. db.Delete<Test01>(s=>s.Name == "Name 10");
  4. PrintLog($"删除完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 

 
查询 1  ,lamda 表达式,查询首行记载,返回实体对象
  1. // lamda 表达式 查询首行数据
  2. var r = db.Query<Test01>(s => s.ID == 5);
  3. var m = r.ToEntity();
  4. PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 

 
 查询 2 ,lamda 表达式 查询列表
  1. // lamda 表达式 查询列表
  2. var r = db.Query<Test01>(s => s.WEx_Like(s.Name, "Name%") && s.ID < 16);
  3. var m = r.ToList();
  4. PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 

 
 查询 3,Query对象 灵活查询
  1. // Query对象 灵活查询
  2. var query = db.CreateQuery<Test01>();
  3. string name = "name%";
  4. if (name != "")
  5. {
  6.     query.WhereAnd(s => s.WEx_Like(s.Name, $"{name}"));
  7. }
  8. var r = db.Query(query);
  9. var m = r.ToList();
  10. PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
复制代码

 
 查询 4 ,使用 Query 委托对象 灵活查询
  1. // 使用 Query 委托对象 灵活查询
  2. string name = "name%";
  3. var r = db.Query<Test01>(query =>
  4. {
  5.     if (name != "")
  6.     {
  7.         query.WhereAnd(s => s.WEx_Like(s.Name, $"{name}"));
  8.     }
  9. });
  10. var m = r.ToList();
  11. PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
复制代码
 
查询 5 ,分页查询,与上述查询方法雷同,赋值 参数 PageNo 与 PageSize 
  1. // 分页查询
  2. string name = "name%";
  3. var r = db.Query<Test01>(query =>
  4. {
  5.     query.PageNo = 2;
  6.     query.PageSize = 6;
  7.     if (name != "")
  8.     {
  9.         query.WhereAnd(s => s.WEx_Like(s.Name, $"{name}"));
  10.     }
  11.     query.OrderBy(s => s.Name); // 姓名排序
  12. });
  13. var m = r.ToList();
  14. PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
复制代码

如果是首页,sqlserver 会 简化sql 语句,如:

 
查询 6 使用sql文本查询(内置 sql 工具)
  1. //使用sql文本查询(内置 sql 工具)
  2. var r =
  3. db.Query(sql =>
  4. {
  5.     int minAge = 15;
  6.     int maxAge = 22;
  7.     sql.AddSQLParam("select * from Test01 where age > {0} and age < {1}", minAge, maxAge);
  8. });
  9. var rData = r.ToDataTable();  // 返回 DataTable 格式
  10. var rList = r.ToList<Test01>(); // 这里 List 泛型可以使用任何类            
  11. PrintLog($"查询完成,\nSqlContent:\n{r.SqlContent}");
复制代码
  
存储过程 1 ,匿名对象参数
  1. //存储过程查询
  2. List<Test01> rList =
  3. da.ExecProcedure("P_Query01", new
  4. {
  5.     Name = "张三"
  6. }).ToList<Test01>();
  7. PrintLog($"存储过程执行完成");
复制代码
 
存储过程 2, 实行
  1. //存储过程执行
  2. da.ExecProcedure("P_Exec01", new
  3. {
  4.     Name = "张三"
  5. }).ExecProc();
  6. PrintLog($"存储过程执行完成");
复制代码
 
存储过程 3, 实行带返回参数的过程
  1. -- 带输出参数的过程<br>Create Proc P_Exec02
  2.     @Name varchar(20),
  3.     @OutMsg varchar(50)  = null out
  4. as
  5. delete from Test01 where [Name] = @Name
  6. set @OutMsg = '删除了,' + @Name
复制代码
 
  1. // 定义输出参数对象
  2. class OutData
  3. {
  4.     public string OutMsg { set; get; } // 输出参数
  5. }
复制代码
 
  1. //执行存储过程并返回输出参数值
  2. var retProc =
  3. da.ExecProcedure("P_Exec02", new
  4. {
  5.     Name = "张三"
  6. });
  7. OutData outData = new OutData();
  8. retProc.ExecProc(outData);
  9. var msg = outData.OutMsg;
  10. PrintLog($"存储过程执行完成, {msg}");
复制代码
 
 
存储过程 4,实行存储过程并返回输出参数值,匿名对象返回
  1. // 执行存储过程并返回输出参数值,匿名对象返回
  2. var retProc =
  3. da.ExecProcedure("P_Exec02", new
  4. {
  5.     Name = "张三"
  6. });
  7. retProc.ExecProc(new { OutMsg = "" });
  8. var msg = retProc.OutObject.OutMsg;
  9. PrintLog($"存储过程执行完成, {msg}");
复制代码
 
 项目地址:https://gitee.com/zhcun/asmile-orm
 
  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4