FluentData - 轻量级.NET ORM持久化技术解决方案

目录:

一、什么是ORM?

二、使用ORM的优势

三、使用ORM的缺点

四、NET下的ORM框架有哪些?

五、几种常用框架的比较

六、什么是FluentData?

七、快速上手如何使用FluentData?

八、提供资源下载

内容:

一、什么是ORM? 

ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。

二、使用ORM的优势 

优势一、 隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。

优势二、ORM使我们构造固化数据结构变得简单易行。

在ORM年表的史前时代,我们需要将我们的对象模型转化为一条一条的SQL语句,通过直连或是DB helper在关系数据库构造我们的数据库体系。而现在,基本上所有的ORM框架都提供了通过对象模型构造关系数据库结构的功能。这,相当不错。

三、使用ORM的缺点 

第一:无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。

第二:面向对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本.

第三:对于复杂查询,ORM仍然力不从心。虽然可以实现,但是不值的。视图可以解决大部分calculated column,case ,group,having,order by, exists,但是查询条件(a and b and not c and (d or d))。。。。。。

世上没有驴是不吃草的(又想好又想巧,买个老驴不吃草),任何优势的背后都隐藏着缺点,这是不可避免的。问题在于,我们是否能容忍缺点

四、.NET下的ORM框架有哪些? 

现在市面上针对.NET ORM框架越来越多

微软自家的LINQ to SQL, ADO.NET Entity Framework不多说。

商业:

1.LightSpeed(免费版比较垃圾。表限制8个。另此厂商有NHibernate Designer工具)

http://www.mindscapehq.com/products/lightspeed

2. Entityspaces(支持Access数据库,比较看好)。

http://www.entityspaces.net/portal/Home.aspx

3.OpenAccess(有比较给力的免费版。)

http://www.telerik.com/products/orm.aspx

4.eXpressPersistent Objects(XPO)(支持Access)

http://www.devexpress.com/products/NET/ORM/

5.DataObjects.Net(自称对LINQ支持比较给力。但支持数据库比较少。有老版本的开源版)

http://dataobjects.net/

6.LLBLGen Pro (虽然支持的数据库比较多。但LINQ to SQL 只能用于MS SQL SERVER)

http://www.llblgen.com/defaultgeneric.aspx

7.LinqConnect , Entity Developer 和 dotConnect Universal (产品比较乱。对LINQ支持比较给力。有自动生成代码和可视化的工具。)

http://www.devart.com/dotconnect/

8.DataDirect Connect for ADO.NET(这个是ORM吗?应该和微软的产品合用)

http://www.datadirect.com/products/net/index.html

9.ALINQ(国人开发。前期反编译了微软的SQL to SQL。后来自己写了各数据库provider发展而成。有免费版。中小型项目都可以用。但国人开发产品似乎充满困境。作者也开发了NHIbernate的代码生成器)

http://www.alinq.org/

开源

1.NHibernate(大名鼎鼎,发展不错。有很多书可学。)

http://nhforge.org/Default.aspx

2.Castle ActiveRecord (建立在NHibernate之上,用.net attribute 映射。不过基本都用NHibernate了。Castle有好多项目可学习参考)

http://www.castleproject.org/castle/projects.html

3.SubSonic (性能是问题。更新缓慢)

http://subsonicproject.com/

4. Opf3(貌似不更新了,可以学习用)

http://opf3.codeplex.com/

5.MyBatis.NET (也不更新了。)

http://code.google.com/p/mybatisnet/

6.BLToolkit(网站貌似被和 谐。这个看介绍挺不错。支持的数据库也不少。性能据说也行。但似乎国内没人用。)

http://bltoolkit.net/

https://github.com/igor-tkachev/bltoolkit

7.MyGeneration(代码自动生成工具和ORM。有各种模板。停止更新了)

http://www.mygenerationsoftware.com/portal/default.aspx

五、几种常用框架的比较 

以上就是市面上比较常见的.net ORM框架。其实比较完美的ORM框架应该是满足:

1.对象与数据库的映射

2.对象缓存

3.可视化设计和代码生成工具

4.支持多数据库

5.动态查询

6.延迟加载

7.非侵入式持久化

8.性能优良

9.支持存储过程和事务

10.多面向对象框架支持

ORM框架确实很方便,但发现也有其不足之处,比如多表联合查询,对视图和存储过程的处理不理想。整体性能低于面向SQL语句。

以上几种框架比较常用的应该是NHibernate,微软的EF及MyBatis.NET和FluentData。

上述几个框架各有优缺点

如:NHibernate 师出名门,大名鼎鼎的Hibernate厂商出品的专门针对.NET的ORM框架,优点是:功能强大,资料齐全,缺点是配置复杂,学习成本高

微软的EF自然是在VS开发中首推的,优点是和VS IDE集成很好,缺点是性能较NHiberte低,据说6.0后,性能明显加强,甚至于超过NHibernate,但本人未测,另外,对其他数据库的支持需要安装第三方插件,还有个人感觉也过于宠大,使用起来,不够灵活。MyBatic.NET功能和易用性介于NHibernate与EF之间。

相比较而言,笔者更推荐使用FluentData,一个轻量级开源的.NET ORM数据持久化框架

六、什么是FluentData? 

FluentData:一种使用Fluent API的新型轻量级ORM模型

FluentData 是微型 ORM(micro-ORM)家族的一名新成员,旨在比大型 ORM(full ORM)更加易用。FluentData 于本月推出,它使用 fluent API 并支持 SQL Server、SQL Azure、Oracle 和 MYSQL。

  FluentData 的设计者 Lars-Erik Kindblad 谈到:

当前市面上的 ORM 框架,如 Entity Framework 和 NHibernate,都过于复杂而且难于学习。此外,由于这些框架自身抽象的查询语言以及从数据库到 .NET 对象的映射太过麻烦,导致它们生成的 SQL 都很低效。

FluentData 另辟蹊径,它是一个轻量级框架,拥有简单的 fluent API 并且很容易学会。

  与其他微型 ORM(如 Dapper 和 Massive)类似,FluentData 关注性能和易用性。它允许开发人员拥有对 SQL 较多的控制,而不是依赖 ORM 进行自动生成。它不仅可以使用 SQL 来执行查询、增添和更新操作,还可以支持使用存储过程和事务。根据文档描述,FluentData 可以在不改动已有结构的情况下,与任何业务对象一同工作。

  以下是 FluentData 的一些其他特性:

· 多结果集(Multiple Result Set):在一次数据库操作下返回多个数据集;

· 开发人员可使用强类型对象或动态对象;

· 可为创建时需要特殊处理的复杂对象自定义实体工厂(Custom Entity Factory);

· 具有添加其他数据库支持的能力。

FluentData 需要 .NET 4.0,并支持 SQL Server、SQL Azure、SQL Server Compact 以及使用 .NET 驱动的 Oracle 和 MySQL。 想要了解进一步信息,如代码示例和免费下载,请访问CodePlex 站点上的 FluentData。(http://fluentdata.codeplex.com/)

七、快速上手如何使用FluentData

下面我将一一举例向大家介绍FluentData在开发过程中的运用.

一:下载该项目并且引用FluentData.dll,或者直接在解决方案中添加该开源项目.项目地址:http://fluentdata.codeplex.com/

二.dll引用入到我们的数据业务层.

1.)创建并且初始化一个IDbContext.

它是我们与数据库操作中的上下文,所有的有关数据操作都调用它下面的方法。初始化它的连接字符串web.config

点击(此处)折叠或打开

  1. public static IDbContext QueryDB()
  2. {
  3. return new DbContext().ConnectionStringName(\"testDBContext\",
    DbProviderTypes.SqlServer);
  4. }

2.)config中的连接字符串实例

点击(此处)折叠或打开

  1. <connectionStrings>
  2. <add
    name=\"testDBContext\" connectionString=\"server=192.168.1.100;uid=sa;pwd=sa!;database=testDB;\"
    />
  3. </connectionStrings>

那么下面就可以在我们的数据业务层中根据自己的需求随心所欲的写sql了。

1.需要返回一个实体:

点击(此处)折叠或打开

  1. Product product = QueryDB().Sql(@\"select
    * from Product
  2. where ProductId = 1\").QuerySingle<Product>()

2.根据参数返回一个实体?别急,尝尝那飘渺的链式操作吧

点击(此处)折叠或打开

  1. Product product = QueryDB().Sql(\"select
    * from Product where [email protected]\")
  2. .Parameter(\"id\", id)
  3. .QuerySingle<Product>()

3.返回一个泛型。

点击(此处)折叠或打开

  1. List<Product> product
    = QueryDB().Sql(\"select
    * from Product where [email protected]\")
  2. .Parameter(\"id\", id)
  3. .Query<Product>()

4.多表支持(这个楼主实际工作中倒是没有用到过)

点击(此处)折叠或打开

  1. using (var command
    = QueryDB().MultiResultSql())
  2. {
  3. List<Category> categories
    = command.Sql(
  4. @\"select * from Category;
  5. select * from Product;\").Query<Category>();
  6. List<Product> products
    = command.Query<Product>();
  7. }

5.插入操作

点击(此处)折叠或打开

  1. var productId = QueryDB().Insert(\"Product\")
  2. .Column(\"Name\", \"The Warren Buffet
    Way\")
  3. .Column(\"CategoryId\", 1)
  4. .ExecuteReturnLastId()

6.当然我喜欢写我牛B的sql。

点击(此处)折叠或打开

  1. var productId = QueryDB().Sql(@\"insert
    into Product(Name, CategoryId)
  2. values(\‘The Warren Buffet Way\‘, 1);\").ExecuteReturnLastId()

7.修改操作.

点击(此处)折叠或打开

  1. QueryDB().Update(\"Product\")
  2. .Column(\"Name\", \"The Warren Buffet Way\")
  3. .Column(\"CategoryId\", 1)
  4. .Where(\"ProductId\", 1)
  5. .Execute()

同上,也可以不用update()方法,而直接写sql.

8.删除操作

QueryDB().Delete("Product").Where("ProductId", 1).Execute();

9.我想链式操作,我想写lambda表达式OK。

点击(此处)折叠或打开

  1. QueryDB().Delete<Product>(\"Product\")
  2. .Where(x=>x.id,id)
  3. .Execute()

10.事物的处理

点击(此处)折叠或打开

  1. using (var context
    = QueryDB().UseTransaction)
  2. {
  3. context.Sql(\"update Product set Name = @0 where ProductId = @1\")
  4. .Parameters(\"The Warren Buffet Way\", 1)
  5. .Execute();
  6. context.Sql(\"update Product set Name = @0 where ProductId = @1\")
  7. .Parameters(\"Bill Gates Bio\", 2)
  8. .Execute();
  9. context.Commit();
  10. }

在事物的操作中记得context.Commit();方法的执行,楼主曾经在自己的一个项目中需要用到事物,却忘记了执行提交这个方法,最后在源码的汪 洋中探索许久

11.存储过程

有关存储过程的使用,楼主在实际项目开发中,用上了存储过程。该存储过程的作用是分页,那么这里也贴出来分享一下

点击(此处)折叠或打开

  1. public static List<T> getPage<T>(string
    tableName,string tableFields, string sqlWhere,string order,int pageIndex,
    int pageSize,
    out int total)
  2. {
  3. var store = QueryDB().StoredProcedure(\"PF_Sys_PageControl\")
  4. .ParameterOut(\"totalPage\", DataTypes.Int16)
  5. .Parameter(\"tableName\", tableName)
  6. .Parameter(\"tableFields\", tableFields)
  7. .Parameter(\"sqlWhere\", sqlWhere)
  8. .Parameter(\"orderFields\", order)
  9. .Parameter(\"pageSize\", pageSize)
  10. .Parameter(\"pageIndex\", pageIndex);
  11. var result=store.Query<T>()

上面贴的都是一些方法内容,具体的可以用方法封装下,当然该ORM是基于Freamework4.0的,Idbcontext接口下的方法也有支持返回一个动态类型的,所以扩展性也不弱。具体的就在于灵活的运用。

至此;写到这里一定很激动了吧,大伙有时间有机会的话,也去尝试下吧。

八、提供资源下载 

关于NHibernate及EF在北风网官网上能找到我的教程,但关于FluentData的这个ORM框架的视频市面上虽有,却少,而且不系统完整,兼与此,

我自己计划出一些关于FluentData的教学视频,已经在进行中,照例给出思维导图及已完成的视频,需了解更多的可以给我留言,希望我的付出对您有所帮助。

已经录制好的视频有如下十二讲,后面计划会结合具体的案例项目更深入的讲解

本次先公开课程的前三讲及部分代码(说明:代码请用VS2012打开),供大家入门参考!

链接:http://pan.baidu.com/s/1eQkV4VC

密码在原文,即下面链接中。

原文地址:http://bbs.ibeifeng.com/read-htm-tid-66379.html

FluentData - 轻量级.NET ORM持久化技术解决方案,布布扣,bubuko.com

时间: 2024-10-29 10:45:44

FluentData - 轻量级.NET ORM持久化技术解决方案的相关文章

FluentData 轻量级.NET ORM持久化技术详解

FluentData 轻量级.NET ORM持久化技术详解(C#4.5/Linq/Lambda,事务/储存过程,开源框架) 课程讲师:风舞烟 课程分类:.NET框架 适合人群:初级 课时数量:19课时 用到技术:FluentData 涉及项目:FluentData轻量级 咨询qq:1840215592 本课程系<基于ASP.NET MVC 4 +Knockout.JS+Web API+FluentData+EasyUI 技术实现Web通用商业开发框架>中的一个单品课程,北风产品总监"

FluentData 轻量级.NET ORM持久化技术详解(C#4.5/Linq/Lambda,事务/储存过程,开源框架)

课程讲师:风舞烟 课程分类:.NET框架 适合人群:初级 课时数量:19课时 更新程度:完成 服务类型:C类(普通服务类课程) 用到技术:FluentData 涉及项目:FluentData轻量级 需要更多相关资料可以联系 Q2748165793 课程介绍 3.1 关于ORM 一.什么是ORM ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交

FluentData - 轻量级.NET ORM持久化技术解决方式

文件夹: 一.什么是ORM? 二.使用ORM的优势 三.使用ORM的缺点 四.NET下的ORM框架有哪些? 五.几种经常使用框架的比較 六.什么是FluentData? 七.高速上手怎样使用FluentData? 八.提供资源下载 内容: 一.什么是ORM?  ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射.这样,我们在详细的操作业务对象的时候,就不须要再去和复杂的SQL语句打交道,仅仅需简单的操作对象的属性和方

Android官方ORM数据库Room技术解决方案简介(一)

是时候该忘记Android SQLite了!Android官方ORM数据库Room技术解决方案简介(一) Android的Romm是Android官方整合出来的一揽子ORM数据库解决方案.Android Room和历史上的ORM数据库如Android ORMLite(见附录文章1,2),Android greenDao等等,有诸多相同的设计思想和理念,但Android Room同时吸收众家ORM数据库之长,有自己新的创新和改进.我将分开写若干篇文章,逐点介绍Android官方的ORM数据库技术解

Android官方ORM数据库Room技术解决方案:@Embedded内嵌对象(二)

Android官方ORM数据库Room技术解决方案:@Embedded内嵌对象(二) (一)附录1简介了Android Room的基本使用.在附录1例子中,User对象元素均为普通的Java基本数据类型,但是实际的开发中,通常建立的持久化存储对象复杂,且通常是结构化的Java对象,互相之间存在引用或者内嵌关系. Android Room支持数据库表Java对象通过注解符@Embedded内嵌一个Java对象.这样就像过去的ORM数据库一样,比如构造一个名为Info的Java对象,作为一个成员变量

spring 和持久化技术的集成:

1 spring mybatis 配置事务管理: <bean id="datasource" class="com.movikr.svc.order.core.spring.MyDruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="#{jdbc_propert

阅读郭林《第一行代码》的笔记——第6章 数据存储全方案,详解持久化技术

瞬时数据是指那些存储在内存当中,有可能会因为程序关闭或其他原因导致内存被回收而丢失的数据.这对于一些关键性的数据信息来说是绝对不能容忍的,谁都不希望自己刚发出去的一条微博,刷新一下就没了吧.那么怎样才能保证让一些关键性的数据不会丢失呢?这就需要用到数据持久化技术了. 持久化技术简介 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则是提供了一种机

第6章 数据存储全方案,详解持久化技术

第6章 数据存储全方案,详解持久化技术 所有的App都可以说是与数据打交道的,离开数据它们什么都不是.那么平时我们怎么存储一些关键的数据呢? 1 持久化技术简介 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件

《精通Hibernate:Java对象持久化技术详解》目录

图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1.4 软件分层的缺点 1.1.5 Java应用的持久化层 1.2 软件的模型 1.2.1 概念模型 1.2.2 关系数据模型 1.2.3 域模型 1.2.4 域对象 1.2.5 域对象之间的关系 1.2.6 域对象的持久化概念 1.3 小结 1.4 思考题第2章 Java对象持久化技术概述: 2.1