Farseer.net轻量级开源框架 V1.x 入门篇:新版本说明

导航

目   录:Farseer.net轻量级开源框架 目录

上一篇:没有了

下一篇:Farseer.net轻量级开源框架 V1.x 入门篇:数据库配置

前言

  V1.x版本终于到来了。本次版本的开发从3月份开始,花了一个月的时间完成了概念版本设计、开发。到了4月份进行多次的内核的重构设计。到了5月份进行大规模的BUG修复、代码优化。

  截止到今天(6月初),已知的BUG都已修复,并已在2个项目中应用了,并且运行良好。

本篇主题

1、新增队列管理:

  新版本改变了V0.x时的使用方式,以Entityframework为模型进行参考设计。

  在新版中,多了队列的概念,也就是我们在对表进行操作时,并不是单句运行的,经常是一段逻辑里面会对不同的表进行多次的操作,最后在进行SaveChange()提交到数据库。在触发SaveChange()时,通过队列管理(QueueManger)迭代所有队列(Queue)进行委托执行提交到数据库。

  这里面涉及到了延迟执行的概念。

2、新增批量提交:

  在过去版本中,User.Data.Insert(new User{ UserName = "NewName" }); 则会立即执行,

  新版本中采用new Table()方式,则会延迟到SaveChange()时才转换成Sql,生成Sql参数化,然后提交到数据库,这里类似EntityFramework的方式。

  当然也提供了与旧版本的操作方式,这里提供不是为了兼容,而是为了有时我们确实并不需要多次操作表,可能就只是简单的一个插入新记录而已。

新版本提供的两种方式

3、新增数据库操作:

1 Table.Data.User.Insert(new UserVO() { UserName = "yy" });
1 using (var context = new Table())
2 {
3     var info = new UserVO() { UserName = "xx" };
4     context.User.Insert(info);
5     context.SaveChanges();
6 }

  在旧版本中只提供了第一种方式,而在新版本中,相当于多了第二种方式。

  在第二种方式中,只有在context.SaveChanges();之后才会对数据库的操作生效。这是从调用的角度来说的,当然新版本中,内核处理方式完全改变了。

  其次是实体类映射完全不同了,更加轻量级了。不再依赖框架提供的基类(旧版本是强制继承的),新版本取消了实体类的基类了。

新版实体类的映射

4、改变的实体类:

 1     [Context()]
 2     public class Table : TableContext<Table>
 3     {
 4         [Set(Name = "Members_User")]
 5         public TableSet<UserVO> User { get; set; }
 6
 7         [Set(Name = "Members_Role", IsCache = true)]
 8         public TableSet<UserRoleVO> UserRole { get; set; }
 9     }
10
11     public class UserVO : IEntity<int?>
12     {
13         /// <summary>
14         /// 用户ID
15         /// </summary>
16         [Field(IsPrimaryKey = true)]
17         public int? ID { get; set; }
18         /// <summary>
19         /// 用户名
20         /// </summary>
21         [Field()]
22         public string UserName { get; set; }
23
24         /// <summary>
25         /// 密码
26         /// </summary>
27         public string PassWord { get; set; }
28     }

  看了上面的实体类映射,是不是觉得很像EntityFramework的DbContext、DbSet呢。

  UserVO 继承 IEntity<int?> 并不是必须的。继承它后,框架会提供一些额外的扩展支持。(后面文章在详细述说)

  在新版本中,主键int ID不是强制性的继承了,因此不能像旧版中可以方便的提供:User.Data.ToInfo(1) 。而为了实现这一效果,则必须要继承这个IEntity接口。

  PO、VO的分离。在旧版本中,如果有多张表的字段结构完全一样,则在映射时必须要为每张表定义一样的实体类。这对项目而言是臃肿的代码。

  在新版本中,VO脱离了框架的束缚,由Table来决定我这张表由“谁”来映射它的结构,这会给我们的实现项目中带来非常灵活的编码方式,比如多个数据库表对应同一个VO实体。

实体类的Map方式分离了

5、Map分离了:

  在旧版本中,因为实体类只有一个,没有分离。所以对整个class进行了映射并缓存。

  而在新版本中,从上文大家也看到了,进行了分离。变成了三种类型:Table、TableSet、实体VO。

  因此对应的Map也有:ContextMap(映射Table的特性、TableSet的特性)、FieldMap(映射实体VO的字段特性)

  它们在命名空间:FS.Mapping.Context中

  在这里,大家有所了解就行。实际项目中用到不大,更多的是FS.Core中内部的调用。它标记了各个实体类的映射关系。

  即然Map改变了,那么实体类的特性标记也变了。

  • DBAttribute没有了,换成了:ContextAttribute。
  • ColumnAttribute没有了,换成了:SetAttribute、FieldAttribute

统一的缓存管理

6、统一了缓存的管理:

  在原来的版本中,有些缓存的(比如反射的、枚举中文名称的、ORM的)是存在各自的管理中。

  而在新版本中,将统一放到FS.Core.CacheManger中。并提供了Clear()方法进行清除所有缓存。

  

  具体代码不在这里贴出来,大家可以从上图中看到缓存管理的地方。

新版本结构的分离

7、结构的分离:

  以上讲的是调用方式的改变以及实体类映射的改变。为了更方便于开源推广,框架在结构上也进行了分离:

  

  • Farseer.Net:ORM映射、数据库操作。
  • Farseer.Net.Utils:提供常用的工具类(但不与WinForm、WebForm、MVC有任何的关联)
  • Farseer.Net.Utils.Form:提供WinForm的相关工具
  • Farseer.Net.Utils.Web:提供WebForm、MVC的相关工具

  

  在实际项目中,大家可能不会用到除ORM以外的工具类(大家有自已常用的工具类)。因此分离出来,让ORM更加专注。

  因此本系列教程,只讲解Farseer.Net相关代码,其它工具类请大家自行下截后研究。(其实也没什么可研究性,就只是一些工具类方法)

  两个版本的区别是巨大的,作者在新版本中是进行了完全的重写,所以本篇中不能一一描述新旧版本的区别。本篇中仅是给大家带来一个初步的印象,后面的篇幅,我们会一一讲解每个运用。

调用的例子

8、全新的编码方式:

  最后,我们在贴一段综合调用的例子给大家:

 1 using (var context = new Table())
 2 {
 3     var info = context.User.Where(o => o.ID > 0 && o.CreateAt < DateTime.Now).Desc(o => new { o.ID, o.LoginCount }).Asc(o => o.GenderType).ToEntity();
 4     info.PassWord = "77777";
 5     context.User.Where(o => o.ID == 1).Update(info);
 6
 7     info.ID = null;
 8     info.PassWord = "00000New";
 9     context.User.Insert(info);
10
11
12     context.User.Where(o => o.ID == 1).Append(o => o.LoginCount, 1).AddUp();
13     context.User.AddUp(o => o.LoginCount, 1);
14     context.UserRole.ToList();
15     context.UserRole.Where(o => o.ID == 1).ToList();
16     context.UserRole.Where(o => o.ID > 1).ToList();
17     var lst = context.User.Where(o => o.ID > 0).Desc(o => new { o.ID, o.LoginCount }).Asc(o => o.GenderType).ToList();
18
19     context.SaveChanges();
20 }
1 new Table().User.Where(o => o.ID > 0).ToList();
2 Table.Data.User.AddUp(o => o.LoginCount, 1);
3 Table.Data.User.Where(o => o.ID > 0).ToList();
4 Table.Data.Set<UserVO>().Where(o => o.ID > 0).ToList();

  本篇不会讲太多实质性的代码,主要是讲解下新旧版本的对比,让大家有个直观的印象。

  本篇就讲解到这,后面的篇幅将开始真正带领大家认识新框架的魅力了。

导航

目   录:Farseer.net轻量级开源框架 目录

上一篇:没有了

下一篇:Farseer.net轻量级开源框架 V1.x 入门篇:数据库配置

广告时间

QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net

Farseer.Net是一款ORM框架 + 常用工具 + 扩展集合。

Farseer 寓意:先知、预言家 通常在某些场合时,提供计谋、策略。也希望该框架能给大家提供最大化的便捷。

ORM:其英文全称是:Object(对象) Relational(关系) Mapping(映射)

Farseer.Net的目标是:快速上手、快速开发、简单方便。

1 Table.Data.User.Where(o=>o.ID == 1).ToEntity();
2 Table.Data.User.Where(o=>o.ID > 1).ToList();
3 Table.Data.User.Where(o=>o.ID != 0).Delete();
4 Table.Data.User.Where(o=>o.ID != 0).AddUp(o=>o.LoginCount, 1);
5 Table.Data.User.Where(o=>o.ID == 1).Update(new User{ UserName = "newName" });
6 Table.Data.User.Insert(new User{ UserName = "newName" });
时间: 2024-10-19 14:56:34

Farseer.net轻量级开源框架 V1.x 入门篇:新版本说明的相关文章

Farseer.net轻量级开源框架 V1.x 入门篇:数据库配置及其它配置文件

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 V1.x 入门篇:新版本说明 下一篇:Farseer.net轻量级开源框架 V1.x 入门篇:表实体类映射 前言 Farseer.Net是支持多数据库的ORM,使用者通过配置文件即可切换指定的数据库而不需要修改项目中的任何代码.本篇讲述如何进行数据库环境的配置.同时也讲述其它配置文件的使用. 配置文件 1.配置文件的路径: 不管是WebForm.Mvc.WinForm,配置文件统一放在:~

Farseer.net轻量级开源框架 V1.x 入门篇:表的数据操作

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 V1.x 入门篇:表实体类映射 下一篇:Farseer.net轻量级开源框架 V1.x 入门篇:视图实体类映射 前言 先跟大家抱歉下,教程迟迟没有更新,因为一个人的精力实在有限(借口?好吧,我认了). 想要Farseer.Net发展的更好,需要认真.客观解读群里朋友们的建议,实际上也确实是这样,有些思想.功能自己确实没想到(必境我自己所能接触的业务场景是非常有限的). 当然在考虑Farse

Farseer.net轻量级开源框架 V1.x 入门篇:表实体类映射

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 V1.x 入门篇:数据库配置及其它配置文件 下一篇:Farseer.net轻量级开源框架 V1.x 入门篇:表的数据操作 前言 上文讲述了数据库配置及其它配置文件的使用,搭建好数据库的链接方式了,接下来就是数据库中的表与实体类的关联了(映射). 在V1.x中,新增了视图.存储过程的映射.在以往的解决方案中,视图是当成”表“来操作的. 但是我们的视图通常只是为了方便查询而建的.而表支持写操作

Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库上下文

导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置文件 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 前言 上文讲述了数据库配置使用,搭建好数据库的链接方式了我们知道怎么做了. 事实上,至今我们仍然还没有讲到代码方面,花了前面这么多篇幅讲解,主要是想由浅入深,不然一上来给大家讲解这讲解那的,听的也一头雾水,反而得不到效果. 这篇比较重要,因为它是我们在使用Far

Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程数据操作

导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表/视图缓存操作 TableCahceSet.ViewCahceSet 前言 在上篇中,我们学会了存储过程的关系映射,其中知道了存储过程需要使用:ProcSet作为操作的上下文,以及在Field特性上,我们知道了新的两个属性用来存储过程的参数输入输出. 在上篇末尾,提到了

Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作

导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射 前言 我们知道对于关系数据库,视图的出现可以在一定的情况下减少因要进行数据关联而带来的大量SQL语句,它可以让我们就像访问一张表一样的简单操作. 作为ORM来说,支持视图也是一项最基础的工作.然而大部份的ORM中,对视图没有特意去提供这个类,因为视图的SQ

Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射

导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作 前言 在V1.0中,新增了视图的映射.在以往的版本中,视图是当成”表“来操作的. 但是我们的视图通常只是为了方便查询而建的.而表支持写操作.会显的很不入调(当然MSSQL的视图也是支持写的,但是这里的视图映射是为了只读视图而来的) 先看下我DEMO中的上下文与视

Farseer.Net ORM开源框架 V1.x 教程目录

本篇教程将以Ver 1.x版本进行详细使用讲解 大家有任何疑问可以加入我们的官方QQ群进行讨论.QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net 整个框架的教程里,我们分为四个阶段,分别是:入门篇.中级篇.高级篇 入门篇:讲述框架的最常用.最基础的一些说明. 中级篇:讲述框架中一些技巧使用. 高级篇:讲述框架的流程原理.详细细述框架里的设计结构. 目录:入门篇 Farseer.net轻量级开源框架 V1.x 入门篇:新版本说明 Farseer.n

Farseer.net轻量级开源框架 入门篇:使用前说明

导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 框架性能测试 下一篇:Farseer.net轻量级开源框架 入门篇: 增.删.改.查操作演示 本篇讲解使用或者学习Farseer前需要知道一些事项: 在后续很多演示中,使用了很多扩展方法.但作者并没有明确出哪些是扩展的方法.所以读者要注意.在使用框架的时候,都需要引用扩展方法的命名空间:using FS.Extend; 为了方便,扩展方法统一放到FS.Extend中,在这里特别说