轻量级ORM框架 QX_Frame.Bantina(2、框架使用方式介绍)

轻量级ORM框架QX_Frame.Bantina系列讲解(开源

1、框架简介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html
html

2、框架使用方式介绍 http://www.cnblogs.com/qixiaoyizhan/p/7418058.html git

3、框架性能对比 敬请期待github

【前言】

  上一节咱们对Bantina ORM框架进行了简单的说明介绍,在这一节中,咱们将对Bantina框架的使用方式进行说明。sql

  下面咱们对Bantina 1.0 使用方式作详细介绍。数据库

  介绍以前,咱们先在本地建立一个数据库,做为演示使用实例以及数据库查询对比的操做对象,该数据库结构以下图所示:框架

  

  数据库名:DB_QX_Frame_Test异步

  其中包含三张表:TB_ClassName  (班级名称)ide

          TB_People    (人员表)性能

          TB_Score     (分数表)测试

          表之间的关系是TB_People中有TB_ClassName的外键

【框架使用方式简介】

  咱们经过Bantina1.0 ORM框架对测试表数据的增删改查来实现对框架的使用介绍。

  首先须要引用对应的dll类库 QX_Frame.Helper,类库多种获取方式在每篇介绍的最下面获取方式中有说明介绍。

  Nuget方式获取:打开Nuget包搜索器,搜索 QX_Frame.Helper,而后选择版本2.0.0 安装便可(1.0.0不包含Bantina框架)

  

  项目中引用命名空间 

  using QX_Frame.Helper_DG.Bantina;

  将上述表转化成对应的实体,这里能够手动写,也能够联系本人获取代码生成器进行生成。(主外键关系要配置好,查询时候须要)

 1 public class DB_QX_Frame_Test : Bantina
 2     {
 3         public DB_QX_Frame_Test() : base("data source=.;initial catalog=DB_QX_Frame_Test;persist security info=True;user id=Sa;password=Sa123456;MultipleActiveResultSets=True;App=EntityFramework") { }
 4     }
 5 
 6     [Table(TableName = "TB_People")]
 7     public class TB_People
 8     {
 9         [Key]
10         public Guid Uid { get; set; }
11         [Column]
12         public string Name { get; set; }
13         [Column]
14         public int Age { get; set; }
15         [Column]
16         [ForeignKey]
17         public int ClassId { get; set; }
18         [ForeignTable]
19         public TB_ClassName TB_ClassName { get; set; }
20     }
21 
22     [Table(TableName = "TB_ClassName")]
23     public class TB_ClassName
24     {
25         // PK(identity)  
26         [Key]
27         public Int32 ClassId { get; set; }
28         //
29         [Column]
30         public String ClassName { get; set; }
31     }

  一、添加数据方法Add

  实例化一个TB_People对象,而后对对象的属性进行赋值。

  实例化数据库实体上下文,而后调用异步方法Add(),将实体添加进去。

  判断异步返回结果,若是添加成功,返回Success!

 1 TB_People people = new TB_People ();
 2 people.Uid = Guid.NewGuid();
 3 people.Name = "555";
 4 people.Age = 22;
 5 people.ClassId = 3;
 6 
 7 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
 8 {
 9     if (test.Add(people).Result)
10     {
11         Console.WriteLine("insert success !");
12     }
13 }

  

  启动调试执行该方法

  原数据库记录:

  

  

  执行后数据库记录:

  

  很简单的操做,咱们将该条目插入了数据库。

  咱们能够在数据库上下文的对象的属性中看到执行的sql语句

  

  二、查询单条实体QueryEntity

  为何咱们不先讲Update和Delete,由于咱们的Update和Delete操做是先查询肯定要操做的对象后再执行对应的修改删除方法,所以咱们先讲查询操做。

  查询单条咱们能够直接调用对应的查询单条实体方法,并用Lambda方式传入查询条件进行查询:

1 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
2 {
3     TB_People people = test.QueryEntity<TB_People>(t => t.Name.Contains("55"));
4     Console.WriteLine($"uid = {people.Uid} , Name = {people.Name} , ClassName = {people.TB_ClassName.ClassName}");
5 }

  

  查询一条Name包含55的数据,若是有多条,会自动匹配第一条。

  执行上述代码:

  数据库原纪录:

  

  

  执行结果:

  

  经过主外键关联的记录也能够被查询到。

  咱们能够在数据库上下文的对象的属性中看到执行的sql语句:

  

  三、查询多条记录List->QueryEntities

  查询多条咱们能够直接调用查询多条的方法QueryEntites方法。该方法有多个重载,根据不一样的业务需求进行不一样的选择。

1 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
2 {
3     List<TB_People> peopleList = test.QueryEntities<TB_People>();
4     foreach (var item in peopleList)
5     {
6         Console.WriteLine($"uid = {item.Uid} , Name = {item.Name} , ClassName = {item.TB_ClassName.ClassName}");
7     }
8 }

  

  咱们执行上述的查询方法:

  数据库原纪录:

  

  执行后的结果:

  

  经过主外键关联的记录也能够被查询到。

  咱们能够在数据库上下文的对象的属性中看到执行的sql语句:

  

  四、分页查询List->QueryEntitiesPaging

  分页查询和查询所有记录很类似,只要传入分页查询的参数便可。

1 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
2 {
3     List<TB_People> peopleList = test.QueryEntitiesPaging<TB_People, string>(1, 2, t => t.Name, t => t.Age == 3, out int count, true);
4     foreach (var item in peopleList)
5     {
6         Console.WriteLine($"uid = {item.Uid} , Name = {item.Name} , ClassName = {item.TB_ClassName.ClassName}");
7     }
8 }

  

  咱们执行上述的查询方法:

  数据库原纪录:

  

  查询后的结果以下:

  

  当前方法传递的参数说明:

QueryEntitiesPaging<TEntity, TKey>(int pageIndex, int pageSize, Expression<Func<TEntity, TKey>> orderBy, Expression<Func<TEntity, bool>> where, out int count, bool isDESC = false)

  咱们传递了一个pageIndex、pageSize、orderBy、where查询条件,以及数据库总数的一个out参数;

  经过主外键关联的记录也能够被查询到。

  咱们能够在数据库上下文的对象的属性中看到执行的sql语句:

  SELECT TOP 2 * FROM (SELECT ROW_NUMBER() OVER (ORDER BY  t.Name DESC ) AS RowNumber,* FROM TB_People t  where  (t.Age = 3)) AS TTTAAABBBLLLEEE  WHERE RowNumber > (2 * (1 - 1))

  五、修改操做Update

  修改操做咱们能够先查询待操做的对象,而后对对象进行修改操做。也能够直接使用lambda表达式传递修改条件进行修改。

 1 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
 2 {
 3     TB_People people = test.QueryEntity<TB_People>(t => t.Name.Contains("55"));
 4     Console.WriteLine($"uid = {people.Uid} , Name = {people.Name} , ClassName = {people.TB_ClassName.ClassName}");
 5 
 6     people.Age = 55;
 7     if (test.Update(people).Result)
 8     {
 9         Console.WriteLine("update success !");
10     }
11 }

  

  咱们将Name包含55的第一条记录的年龄改为55.

  咱们执行上述的查询方法:

  数据库原纪录:

  

  执行结果:

  

  而后查看执行后的数据库记录:

  

  能够看到,数据已经被成功修改。

  经过数据库上下文对象咱们来查看执行的sql语句:

  

  上述方法是默认根据主键进行修改,也就是说不支持主键的修改,若是想要获得主键修改的支持,请调用重载方法进行修改:

  

  固然,若是是自增字段,那么会自动跳过修改环节。

  六、删除操做Delete

  删除操做咱们能够先查询待操做的对象,而后对对象进行删除操做,也能够直接使用lambda表达式传递删除条件进行删除。

 1 using (DB_QX_Frame_Test test = new DB_QX_Frame_Test())
 2 {
 3     TB_People people = test.QueryEntity<TB_People>(t => t.Name.Contains("55"));
 4 
 5     people.Age = 55;
 6 
 7     if (test.Delete(people).Result)
 8     {
 9        Console.WriteLine("delete success !");
10     }
11 }

  

  咱们将Name包含55的第一条记录进行删除操做.

  咱们执行上述的查询方法:

  数据库原纪录:

  

  执行结果:

  

  而后查看执行后的数据库记录:

  

  能够看到,数据已经被成功删除。

  经过数据库上下文对象咱们来查看执行的sql语句:

  

  上述方法是默认根据主键进行修改,若是咱们想要快捷地进行对应条件的删除,那么咱们能够直接使用lambda表达式传递where条件进行修改,不须要先进行查询操做。

  

  七、原生Sql查询方式支持

  Bantina框架支持原生Sql语句的执行方式,有操做和查询两种方式,还保留了存储过程执行接口。(使用泛型便于直接将结果转化成对应的集合)

  

  咱们在这里简单执行一条查询集合的sql语句:

  

  查询结果:

  

   在这里须要说明的是,这里不会直接对关联外键表进行查询,咱们这里查询传入的泛型T和表查询的结果必须是一一对应的,所以,咱们能够实现配置DTO数据传输对象去匹配查询的结果集。

  并非不能实现关联查询,是为了保持sql查询的灵活性的特色没有加相应功能。


 

  到这里,咱们大部分的基础功能操做已经演示完毕,已经能够知足咱们大部分的业务需求。

  关于咱们Bantina ORM 实体框架的性能介绍咱们会放在下一章进行和其余经常使用ORM框架做为对比展现。

【获取方式】

  一、Nuget获取:Nuget搜索 QX_Frame.Helper_DG 

  

  二、GitHub查看源代码:https://github.com/dong666/QX_Frame.Helper_DG

  注:bantina已正式更名为Bankinate,新版本GitHub:https://github.com/dong666/QX_Frame.Bantina

  三、联系本人获取,联系方式在下方博客签名中,qq、email都可。

相关文章
相关标签/搜索