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 而且非常easy学会。 

 

  与其它微型 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 id=@id\")
  2. .Parameter(\"id\", id)
  3. .QuerySingle<Product>()

3.返回一个泛型。

点击(此处)折叠或打开

  1. List<Product> product
    = QueryDB().Sql(\"select
    * from Product where id=@id\")
  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

password在原文,即以下链接中。

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

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

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

    官方地址:http://fluentdata.codeplex.com/ 官方教程:http://fluentdata.codeplex.com/documentation FluentData入门 ...

  2. 11.Cocos2dx2.2下使用JNI技术调用jar包里面的一些方法遇到的一些问题及解决方式。

    <span style="font-family: Arial, Helvetica, sans-serif;">步骤一:导入JniHelper.h头文件.</s ...

  3. 轻量级.NET ORM、高性能.NET ORM 之 SqlSugar 开源ORM - ASP.NET

    3.0最新API: http://www.cnblogs.com/sunkaixuan/p/5911334.html 1.前言/Preface SqlSugar从去年到现在已经一年了,版本从1.0升到 ...

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

    图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...

  5. Android基础总结(5)——数据存储,持久化技术

    瞬时数据:指那些存储在内存当中,有可能会因为程序广播或其他原因导致内存被回收而丢失的数据. 数据持久化:指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不丢失. ...

  6. 关于cocos2dx手游lua文件加密的解决方式

    非常多使用cocos2dx+lua做游戏的同学.都会想到一个问题,我的游戏一旦公布,如何才干保证的我脚本代码不被破解.不泄露代码.尽管这和开源.共享的原则不合.可是代码也是coder的劳动成果,理应得 ...

  7. Android学习之基础知识九 — 数据存储(持久化技术)之SQLite数据库存储

    前面一讲介绍了数据持久化技术的前两种:文件存储.SharedPreferences存储.下面介绍第三种技术:SQLite数据库存储 一.SQLite数据库存储 SQLite数据库是一款轻量级的关系型数 ...

  8. 移动基于Percona XTRADB Cluster的大数据解决方式

    移动基于Percona XTRADB Cluster的大数据解决方式          一.移动的去IOE之旅      近期由于"棱镜门"事件的曝光.引起了国家对信息安全问题的注 ...

  9. Redis高可用详解:持久化技术及方案选择

    文章摘自:https://www.cnblogs.com/kismetv/p/9137897.html 前言 在上一篇文章中,介绍了Redis的内存模型,从这篇文章开始,将依次介绍Redis高可用相关 ...

随机推荐

  1. POJ--Strange Way to Express Integers

    Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 8370   ...

  2. C#搞工控的一些代码

    首先工控项目都会用到: using System.Runtime.InteropServices; 1.字节转化为单精度浮点数 2.单精度转成字节 3.使用结构体 4.使用动态链接库 5.ASCCII ...

  3. Windows下面安装和配置Solr 4.9(三)支持中文分词器

    首先将下载解压后的solr-4.9.0的目录里面F:\tools\开发工具\Lucene\solr-4.9.0\contrib\analysis-extras\lucene-libs找到lucene- ...

  4. iOS - OC 与 C 互相操作

    前言 在 Objective-C 语言中,我们可以使用 C.Swift 语言编写代码,我们可以导入任意用 C.Swift 写的 Cocoa 平台框架.C 框架或 Swift 类库. 1.在 C 中使用 ...

  5. Python学习笔记014——迭代工具函数 内置函数zip()

    1 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操 ...

  6. 配置SELINUX

    selinux的配置文件:# more /etc/selinux/config # This file controls the state of SELinux on the system. # S ...

  7. 通过UNIX域套接字传递描述符和 sendmsg/recvmsg 函数

    在前面我们介绍了UNIX域套接字编程,更重要的一点是UNIX域套接字可以在同一台主机上各进程之间传递文件描述符. 下面先来看两个函数: #include <sys/types.h>  #i ...

  8. python标准库介绍——28 sha 模块详解

    ==sha 模块== ``sha`` 模块提供了计算信息摘要(密文)的另种方法, 如 [Example 2-39 #eg-2-39] 所示. 它与 ``md5`` 模块类似, 但生成的是 160 位签 ...

  9. xcode cocos2dx 3.x mac工程 当assert(cond)触发断点,但cond却为0

    xcode cocos2dx 3.x mac工程 当发生assert(cond)触发断点,但查看cond值却为0的诡异情况时,clean再重新build就好了.

  10. Kafka剖析:Kafka背景及架构介绍

    <Kafka剖析:Kafka背景及架构介绍> <Kafka设计解析:Kafka High Availability(上)> <Kafka设计解析:Kafka High A ...