简单、易上手、高效、实用、灵活的 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, 实行带返回参数的过程- -- 带输出参数的过程<br>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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |