导航

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

上一篇:没有了

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

前言

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

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

本篇主题

1、新增队列管理:

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

  在新版中,多了队列的概念,也就是我们在对表进行操作时,并不是单句运行的,经常是一段逻辑里面会对不同的表进行多次的操作。

  最后在进行SaveChange()时,通过队列管理(QueueManger)迭代所有队列(Queue)进行委托执行提交到数据库。

  这里面涉及到了延迟执行的概念。 但一旦遇到“查询”的SQL操作时,会提前提交代码到数据库。

新版本提供的两种方式

2、新增数据库操作:

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();之后才会对数据库的操作生效。这是从调用的角度来说的,当然新版本中,内核处理方式完全改变了。

  采用new Table()方式,则会延迟到SaveChange()时才转换成Sql,生成Sql参数化,然后提交到数据库(默认事务方式,允许手动关闭),这里类似EntityFramework的方式。

新版实体类的映射

3、改变的实体类(不再需要继承基类了):

 1     /// <summary>
 2     ///     数据库上下文
 3     /// </summary>
 4     public class Table : DbContext<Table>
 5     {
 6         /// <summary>
 7         ///     加载表时触发
 8         /// </summary>
 9         protected override void CreateModelInit(Dictionary<string, SetDataMap> map)
10         {
11             // 设置一张表的名称、主键、外键
12             map["User"].SetName("Members_User");
13             map["UserRole"].SetName("Members_Role");
14             map["Orders"].SetName("Members_Orders");
15         }
16
17         /// <summary>
18         ///     默认为0时,可不显示填写这一项,当前只是为了演示
19         /// </summary>
20         public Table() : base(0)
21         {
22         }
23
24         /// <summary> 普通表 </summary>
25         public TableSet<UserVO> User { get; set; }
26
27         /// <summary> 缓存表 </summary>
28         public TableSetCache<UserRoleVO> UserRole { get; set; }
29
30         /// <summary> 普通表(GUID主键) </summary>
31         public TableSet<OrdersVO> Orders { get; set; }
32
33     }

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

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

  在新版本中,主键int ID不是强制性的继承了

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

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

实体类的Map方式分离了

4、Map分离了:

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

  而在新版本中,Map区分了:结构性的Map与非结构性的Map。

  这样区分的目地是因为结构性的Map是运行时固定不变的,可以进行缓存。而非结构性的Map,包含了用户定义(动态改变)的数据。所以不进行缓存处理。

  它们在命名空间:FS.Sql.Map中

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

统一的缓存管理

5、统一了缓存的管理:

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

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

新版本结构的分离

6、结构的分离:

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

  • Farseer.Net:基础类库。
  • Farseer.Net.Sql:本篇教程的类库:Orm
  • Farseer.Net.Utils:提供常用的工具类(但不与WinForm、WebForm、MVC有任何的关联)
  • Farseer.Net.Utils.Form:提供WinForm的相关工具
  • Farseer.Net.Utils.Web:提供WebForm、MVC的相关工具

  

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

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

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

调用的例子

7、全新的编码方式:

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

 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轻量级ORM开源框架 目录

上一篇:没有了

下一篇:Farseer.net轻量级ORM开源框架 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" });

转载于:https://www.cnblogs.com/steden/p/4555257.html

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

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

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...

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

    如果可以,希望Farseer.net 能让你解放双手! QQ群:116228666 (Farseer.net开源框架交流) 请注明:Farseer.Net 整个框架的教程里,我们分为四个阶段,分别是: ...

  3. Jeasyframe 开源框架 V1.6 发布

    2019独角兽企业重金招聘Python工程师标准>>> 产品介绍: Jeasyframe开源框架是基于SSH框架开发的一款开源框架,框架集成了公司.部门.职位.用户.角色.菜单.权限 ...

  4. python比flask更好的框架_(入门篇)Python框架之FastAPI——一个比Flask和Tornado更高性能的API 框架...

    用官方的话来说,FastAPI 是一种现代,快速(高性能)的 Web 框架,基于标准Python 类型提示使用 Python 3.6+ 构建 API FastAPI 站在巨人的肩膀上? 很大程度上来说 ...

  5. Yaf框架视频教程之入门篇【已完成】

    2019独角兽企业重金招聘Python工程师标准>>> 本系列主要介绍PHP的Yaf框架,包含从安装到配置,如何快速的生成代码骨架,也讲解了框架的运行流程,应用在使用前该如何配置,重 ...

  6. 基于HTML5 Canvas的开源图形组件-ichartjs 入门篇

    ichartjs的官方网站为ichartjs(http://www.ichartjs.com/),目前最新版本为ichartjs v1.2 Released ,ichartjs的官方介绍: ichar ...

  7. TKCORE框架学习之入门篇(十三)--显示格式介绍

    显示格式介绍 Display,中文即显示,用于控制字段的显示格式.框架已经内置了一些常用的Dispaly,你只需要配置DataXml中相应字段的tk:Display属性,就可以控制字段显示格式. 在哪 ...

  8. 【完结】12大深度学习开源框架(caffe,tf,pytorch,mxnet等)快速入门项目

    这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpeng2008/yousa ...

  9. 【完结】给新手的12大深度学习开源框架快速入门项目

    文/编辑 | 言有三 这是一篇总结文,给大家来捋清楚12大深度学习开源框架的快速入门,这是有三AI的GitHub项目,欢迎大家star/fork. https://github.com/longpen ...

最新文章

  1. winform 让他间隔一段时间 执行事件 且只执行一次_Redis 事件机制详解
  2. mysql安装到最后报错_mysql 安装到最后一步时,start service 为失败状态
  3. 《IT项目管理》读书笔记(9) —— 项目沟通管理
  4. 图解从 URL 到网页通信原理
  5. Sublime Text 2快捷键大全
  6. 怎样添加、移除、移动、复制、创建和查找节点?
  7. C语言 | 赋值与运算符
  8. mysql.sock问题
  9. 关于node.js和npm 和nvm_byKL
  10. 作者:石在辉(1983-),男,中移(苏州)软件技术有限公司大数据产品部方案架构师。...
  11. python apache mysql_在Linux系统上部署Apache+Python+Django+MySQL环境
  12. 线性映射和线性变换的区别
  13. Dirichlet Process和Hierarchical Dirichlet Process的理解(PPT)
  14. c语言程序设计万年历的显示,C语言程序设计万年历
  15. MySQL 练习 创建表格并修改
  16. PowerPoint 消除所有动画VBA指令
  17. 青苹果linux版本客户端,青苹果影院新版本
  18. 专升本英语——菜鸟学习笔记【知识点齐全-轻松学习】!!!
  19. docer 设置 拉取http协议的私有仓库
  20. mysql server has fone away

热门文章

  1. libseccomp2 (>= 2.3.0) but 2.2.3-3ubuntu3 is to be installed
  2. etcd 笔记(08)— 基于 etcd 实现分布式锁
  3. 2022-2028年中国氟硅橡胶产业发展动态及投资前景分析报告
  4. Pytorch两种模型保存方式
  5. TensorRT 数据和表格示例
  6. 英特尔内存革新助平安云 Redis 云服务降本增效
  7. 深度学习调用TensorFlow、PyTorch等框架
  8. ADAS系统长篇综述(下)
  9. minsdk(API23)deviceSdk(API22)
  10. 没有添加跳新增,添加之后跳修改