上一主题下一主题
«12345»Pages: 1/46     Go
关键字
主题 : FluentData - 轻量级.NET ORM持久化技术解决方案
级别: VIP四级

UID: 230365
精华: 12
发帖: 314
威望: 3432 点
学点: 380 点
贡献: 2 点
好评: 1 点
学币: 0 个
注册时间: 2010-04-16
最后登录: 2014-09-25
楼主  发表于: 2014-06-06 10:13||

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

管理提醒: 本帖被 zylzyl 执行加亮操作(2014-06-06)
基于ASP.NET MVC 4 +Knockout.JS+Web API+FluentData+EasyUI 技术实现Web通用商业****发框架(学习版):点此了解详情
;GZ'R b  
|PLWF[+t8  
.NET Web****发零基础到商业项目实战北风特训营(赠送价值近百万商业源码):点此了解详情
lq)[  
>+*lG>!z  
FluentData - 轻量级.NET ORM持久化技术解决方案 DXfQy6 k'  
<rNz&;m}  
目录: (vbI4&r  
"%+9p6/  
一、什么是ORM? ]#J-itO  
二、使用ORM的优势 D(M^%z2N  
三、使用ORM的缺点 AJt4I W@  
四、NET下的ORM框架有哪些? {7 nz:f  
五、几种常用框架的比较 2QV|NQSl  
六、什么是FluentData? Iz I hC  
七、快速上手如何使用FluentData? ,a} vx"~  
八、****资源下载 -&r A<j  
=' #yG(h  
l%MIna/Tp  
DsGtc<l%  
内容: Y f;Slps  
*`bAu *  
一、什么是ORM? F]^ZdJ2  
ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。 ]jwF[D  
x<[W9Z'~?9  
二、使用ORM的优势 l*<RKY8  
优势一、 隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速****发,由此而来。 /FA0(< -}  
[78^:q-/0  
优势二、ORM使我****乖旃袒萁峁贡涞眉虻ヒ仔小 44(l1xEN+  
w&^_2<a2  
         在ORM年表的史前时代,我们需要将我们的对象模型转化为一条一条的SQL语句,通过直连或是DB helper在关系数据库构造我们的数据库体系。而现在,基本上所有的ORM框架都****了通过对象模型构造关系数据库结构的功能。这,相当不错。 tJ!s /|u(  
^K n{L  
三、使用ORM的缺点 AH#klYK  
第一:无可避免的,自动化意味着映射和关联管理,代价是牺牲性能(早期,这是所有不喜欢ORM人的共同点)。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。 'J"m`a8no  
第二:面向对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本. !L_\6;aP,x  
第三:对于复杂查询,ORM仍然力不从心。虽然可以实现,但是不值的。视图可以解决大部分calculated column,case ,group,h****ing,order by, exists,但是查询条件(a and b and not c and (d or d))。。。。。。 t^-yK;`?q:  
3,RaM^5dV  
       世上没有驴是不吃草的(又想好又想巧,****个老驴不吃草),任何优势的背后都隐藏着缺点,这是不可避免的。问题在于,我们是否能容忍缺点 ]S#m o  
vTY+J$N__  
四、.NET下的ORM框架有哪些? a+Z95~*sZ"  
现在市面上针对.NET ORM框架越来越多 WN%KA TA  
微软自家的LINQ to SQL, ADO.NET Entity Framework不多说。 &?mJL0fy  
">^O{X\  
商业: !9knF t43  
T 2^0Q9E?  
1.LightSpeed(免费版比较垃圾。表限制8个。另此厂商有NHibernate Designer工具) _H+|Ic  
u79,+H@ep  
http://www.mindscapehq.com/products/lightspeed !K~:crUV|S  
}t^N|I  
2. Entityspaces(支持Access数据库,比较看好)。 0[qU k(=}[  
6eNo}Tos9  
http://www.entityspaces.net/portal/Home.aspx ;/Z9M"!u[  
3.OpenAccess(有比较给力的免费版。) vxRy7:G"  
7z=zJ4C  
http://www.telerik.com/products/orm.aspx m.}Yn,  
A@kp` -  
4.eXpressPersistent Objects(XPO)(支持Access) nK" XyZ&  
PsLMV:O9S  
http://www.devexpress.com/products/NET/ORM/ wK_I"  
5.DataObjects.Net(自称对LINQ支持比较给力。但支持数据库比较少。有老版本的****源版) 8$H_:*A?  
&3Q!'pJJ  
http://dataobjects.net/ B~ o;,}  
vT#$`M<  
6.LLBLGen Pro (虽然支持的数据库比较多。但LINQ to SQL 只能用于MS SQL SERVER) \m3;<A/3n  
hpxqL% r  
http://www.llblgen.com/defaultgeneric.aspx XQW+6LEQ  
7.LinqConnect , Entity Developer 和 dotConnect Universal (产品比较乱。对LINQ支持比较给力。有自动生成代码和可视化的工具。) N6"b Ox J(  
Kd?TIeFE  
http://www.devart.com/dotconnect/ L"w% ew  
8.DataDirect Connect for ADO.NET(这个是ORM吗?应该和微软的产品合用) Vt {uG  
t8Sblgq  
http://www.datadirect.com/products/net/index.html X}~5%B(  
!$/1Q+  
9.ALINQ(国人****发。前期反编译了微软的SQL to SQL。后来自己写了各数据库provider发展而成。有免费版。中小型项目都可以用。但国人****发产品似乎充满困境。作者也****发了NHIbernate的代码生成器) `aj;FrF  
gEVN;G'B<=  
http://www.alinq.org/ i@=0fHiZQ  
q~[@(+zP5  
****源 wA+QUN3#n  
}@kD&2  
1.NHibernate(大名鼎鼎,发展不错。有很多书可学。) $\S;f"IM.  
{XT3M{`rWL  
http://nhforge.org/Default.aspx njbEw4nX  
[^rT: %Z  
2.Castle ActiveRecord (建立在NHibernate之上,用.net attribute 映射。不过基本都用NHibernate了。Castle有好多项目可学习参考) 5XK}8\  
AS 5\X.%L*  
http://www.castleproject.org/castle/projects.html ]g#ur@Y%  
p$>e{-u  
3.SubSonic (性能是问题。更新缓慢) O}4(v#  
XS$5TNI  
http://subsonicproject.com/ :)!X%2 _  
hD~P)@^  
4. Opf3(貌似不更新了,可以学习用) 'ZyHp=RN)  
<SiD m-=E  
http://opf3.codeplex.com/ bU`Ih# q  
]1A"l!yf  
W$&kOdD!$  
5.MyBatis.NET (也不更新了。) m$T?~o o  
http://code.google.com/p/mybatisnet/ 71AR)6<R  
("2ukHc  
B{fPj9Y0  
IR*g>q  
6.BLToolkit(网站貌似被和 谐。这个看介绍挺不错。支持的数据库也不少。性能据说也行。但似乎国内没人用。) .#"O VI]#  
|ITSd%`3_  
http://bltoolkit.net/ gTz66a@i  
https://github.com/igor-tkachev/bltoolkit wGd4:W  
D-)jmz>R  
I(6k.PQ  
Dq/ _#&S  
7.MyGeneration(代码自动生成工具和ORM。有各种模板。停止更新了) LOY+^  
3 y!yz3E  
http://www.mygenerationsoftware.com/portal/default.aspx AXBv']Y  
 3nfw:.  
五、几种常用框架的比较 NTRw:'  
以上就是市面上比较常见的.net ORM框架。其实比较完美的ORM框架应该是满足: Ndj9B|s_  
6d~[My  
1.对象与数据库的映射 i2or/(u`  
2.对象缓存 8Z;wF  
3.可视化设计和代码生成工具 0{ov LzW  
4.支持多数据库 q2VQS1R`8  
5.动态查询 OtuOT=%  
6.延迟加载 <UJgl{ -  
7.非侵入式持久化 'T54k  
8.性能优良 sY?pp '}a  
9.支持存储过程和事务 846j<fE  
10.多面向对象框架支持 4;;F(yk8  
XcJ'w  
ORM框架确实很方便,但发现也有其不足之处,比如多表联合查询,对视图和存储过程的****不理想。整体性能低于面向SQL语句。 {Y{*(5YV  
以上几种框架比较常用的应该是NHibernate,微软的EF及MyBatis.NET和FluentData。 l[]K5?AS>-  
上述几个框架各有优缺点 L2>UA<@mZ  
如:NHibernate 师出名门,大名鼎鼎的Hibernate厂商出品的专门针对.NET的ORM框架,优点是:功能强大,资料齐全,缺点是配置复杂,学习成本高 XZhX%OT!  
微软的EF自然是在VS****发中首推的,优点是和VS IDE集成很好,缺点是性能较NHiberte低,据说6.0后,性能明显加强,甚至于超过NHibernate,但本人未测,另外,对其他数据库的支持需要安装第三方插件,还有个人感觉也过于宠大,使用起来,不够灵活。MyBatic.NET功能和易用性介于NHibernate与EF之间。 zR)|%[sWwQ  
相比较而言,****吒****使用FluentData,一个轻量级****源的.NET ORM数据持久化框架 jRXpEiM  
)L#C1DP#  
六、什么是FluentData? h'wOslyFa  
FluentData:一种使用Fluent API的新型轻量级ORM模型 Z(AI]wk3<  
FluentData 是微型 ORM(micro-ORM)家族的一名新成员,旨在比大型 ORM(full ORM)更加易用。FluentData 于本月推出,它使用 fluent API 并支持 SQL Server、SQL Azure、Oracle 和 MYSQL。  }9fH`C/m  
m3]|I(]`Xe  
  FluentData 的设计者 Lars-Erik Kindblad 谈到: (x9d7$2  
' >[KVvm  
当前市面上的 ORM 框架,如 Entity Framework 和 NHibernate,都过于复杂而且难于学习。此外,由于这些框架自身抽象的查询语言以及从数据库到 .NET 对象的映射太过麻烦,导致它们生成的 SQL 都很低效。 X ^>o/U  
xKKL4ws  
FluentData 另辟蹊径,它是一个轻量级框架,拥有简单的 fluent API 并且很容易学会。 {O*<1v9<  
O4FW/)gq  
  与其他微型 ORM(如 Dapper 和 Massive)类似,FluentData 关注性能和易用性。它允许****发人员拥有对 SQL 较多的控制,而不是依赖 ORM 进行自动生成。它不仅可以使用 SQL 来执行查询、增添和更新操作,还可以支持使用存储过程和事务。根据文档描述,FluentData 可以在不改动已有结构的情况下,与任何业务对象一同工作。 ~*D)L '`2M  
?}sh@;]*h  
  以下是 FluentData 的一些其他特性: z^9Yoqog  
U:>'^tkp  
· 多结果集(Multiple Result Set):在一次数据库操作下返回多个数据集; N!DAn \g  
· ****发人员可使用强类型对象或动态对象; l5S (x Q  
· 可为创建时需要特殊****的复杂对象自定义实体工厂(Custom Entity Factory); `pY\Mmgv1  
· 具有添加其他数据库支持的能力。 /h%<e  
FluentData 需要 .NET 4.0,并支持 SQL Server、SQL Azure、SQL Server Compact 以及使用 .NET 驱动的 Oracle 和 MySQL。 想要了解进一步信息,如代码示例和免费下载,请访问CodePlex 站点上的 FluentData。(http://fluentdata.codeplex.com/ d -6[\S#  
Q17"hO>kC  
&|P@$O>  
eN{[T PPCq  
七、快速上手如何使用FluentData u8 14ZN}  
)'\Jp 7*3  
下面我将一一举例向大家介绍FluentData在****发过程中的运用.  Q^/5hA  
一:下载该项目并且引用FluentData.dll,或者直接在解决方案中添加该****源项目.项目地址:http://fluentdata.codeplex.com/ 0m ,A`*o  
二.dll引用入到我们的数据业务层. a&)0_i:r  
1.)创建并且初始化一个IDbContext. I.tJ4  
它是我们与数据库操作中的上下文,所有的有关数据操作都调用它下面的方法。初始化它的连接字符串web.config K|];fd U  
复制代码
  1. public static IDbContext QueryDB()
  2. {
  3.    return new DbContext().ConnectionStringName("testDBContext", DbProviderTypes.SqlServer);
  4. }
.Ozfj@ f  
/ee:GjUkB  
2.)config中的连接字符串实例 4cL NPl<  
复制代码
  1. <connectionStrings>
  2.     <add name="testDBContext" connectionString="server=192.168.1.100;uid=sa;pwd=sa!;database=testDB;" />
  3.   </connectionStrings>
m_~ p G  
那么下面就可以在我们的数据业务层中根据自己的需求随心所欲的写sql了。 l?(nkg["nY  
1.需要返回一个实体: P]T(I/\g  
复制代码
  1. Product product = QueryDB().Sql(@"select * from Product
  2.                 where ProductId = 1").QuerySingle<Product>();
G ;V@oT  
2.根据参数返回一个实体?别急,尝尝那飘渺的链式操作吧 :gY$/1SYD  
复制代码
  1. Product product = QueryDB().Sql("select * from Product where id=@id")
  2.                   .Parameter("id", id)
  3.                  .QuerySingle<Product>();
PC/fb-J  
3.返回一个泛型。 " e g`3v  
复制代码
  1. List<Product> product = QueryDB().Sql("select * from Product where id=@id")
  2.                   .Parameter("id", id)
  3.                  .Query<Product>();
q#v.-013r  
4.多表支持(这个楼主实际工作中倒是没有用到过) 'T7JXV5  
复制代码
  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. }
0m)["g4  
  5.插入操作 ~X5yHf3  
复制代码
  1. var productId = QueryDB().Insert("Product")
  2.                 .Column("Name", "The Warren Buffet Way")
  3.                 .Column("CategoryId", 1)
  4.                 .ExecuteReturnLastId();
c a_N76o!  
6.当然我喜欢写我牛B的sql。 -'JTVfm.  
复制代码
  1. var productId = QueryDB().Sql(@"insert into Product(Name, CategoryId)
  2.                     values('The Warren Buffet Way', 1);").ExecuteReturnLastId();
z=!$3E ecr  
7.修改操作. [V{JuG;s  
复制代码
  1. QueryDB().Update("Product")
  2.         .Column("Name", "The Warren Buffet Way")
  3.         .Column("CategoryId", 1)
  4.         .Where("ProductId", 1)
  5.         .Execute();
64s+ 0}  
同上,也可以不用update()方法,而直接写sql. %H>vMR-,~  
8.****操作 mLk@&WxG  
QueryDB().Delete("Product").Where("ProductId", 1).Execute(); Ol9U^  
9.我想链式操作,我想写lambda表达式OK。 BzF.KCScs  
复制代码
  1. QueryDB().Delete<Product>("Product")                                                    
  2.      .Where(x=>x.id,id)
  3.      .Execute();
a\vf{2  
10.事物的**** +^gh3Y  
复制代码
  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. }
Q6,rY(b6  
在事物的操作中记得context.Commit();方法的执行,楼主曾经在自己的一个项目中需要用到事物,却忘记了执行提交这个方法,最后在源码的汪 洋中探索许久 )]J I Q"rR  
11.存储过程 WRh&4[G'  
有关存储过程的使用,楼主在实际项目****发中,用上了存储过程。该存储过程的作用是分页,那么这里也贴出来分享一下 #"ayq,GC<  
复制代码
  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>()
7;;W{W%  
,M7sOp6}  
上面贴的都是一些方法内容,具体的可以用方法封装下,当然该ORM是基于Freamework4.0的,Idbcontext接口下的方法也有支持返回一个动态类型的,所以扩展性也不弱。具体的就在于灵活的运用。 !/< 5.9!9r  
至此;写到这里一定很激动了吧,大伙有时间有机会的话,也去尝试下吧。 6\ux;lksn*  
3 4YYw@?}Y  
八、****资源下载 E}k#-+u<S4  
{9;~xx To  
关于NHibernate及EF在北风网官网上能找到我的教程,但关于FluentData的这个ORM框架的视频市面上虽有,却少,而且不系统完整,兼与此, G&D N'bp  
我自己计划出一些关于FluentData的教学视频,已经在进行中,照例给出思维导图及已完成的视频,需了解更多的可以给我留言,希望我的付出对您有所帮助。 dtA- 4Ndm  
  [attachment=7044] dwrc"GK!o  
已经录制好的视频有如下十二讲,后面计划会结合具体的案例项目更深入的讲解 )FWF T:P~  
  [attachment=7045]  =e$ #m;  
本次先公****课程的前三讲及部分代码(说明:代码请用VS2012打****),供大家入门参考! lU Uq|Qr  
(n"  )  
链接: http://pan.baidu.com/s/1eQkV4VC ]~WP;o  
vR,HCI  
密码:
本部分内容设定了隐藏,需要回复后才能看到
FAM`+QtNw  
nyQ FS  
H7Y}qP5X  
基于ASP.NET MVC 4 +Knockout.JS+Web API+FluentData+EasyUI 技术实现Web通用商业****发框架(学习版):点此了解详情
+V2a|uvEc  
T:)>Tcv}:  
.NET Web****发零基础到商业项目实战北风特训营(赠送价值近百万商业源码):点此了解详情
级别: 终身会员

UID: 120836
精华: 0
发帖: 193
威望: 1696 点
学点: 126 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2009-02-15
最后登录: 2015-12-14
沙发(1楼)  发表于: 2014-06-09 01:31||

very good  
级别: 北风爱好者

UID: 468312
精华: 0
发帖: 1
威望: 22 点
学点: 17 点
贡献: 2 点
好评: 0 点
学币: 0 个
注册时间: 2014-06-10
最后登录: 2014-11-28
板凳(2楼)  发表于: 2014-06-10 16:53||

学习一下
级别: VIP一级

UID: 331285
精华: 0
发帖: 314
威望: 3529 点
学点: 255 点
贡献: 1 点
好评: 0 点
学币: 0 个
注册时间: 2011-11-27
最后登录: 2015-03-28
地板(3楼)  发表于: 2014-06-10 16:54||

不错啊
级别: VIP五级

UID: 270178
精华: 0
发帖: 18
威望: 414 点
学点: 453 点
贡献: 45 点
好评: 0 点
学币: 8 个
注册时间: 2010-11-11
最后登录: 2016-11-15
地下室(4楼)  发表于: 2014-06-10 22:18||

顶一个,期待风老师的这个课程!
级别: VIP五级

UID: 461512
精华: 0
发帖: 8
威望: 2 点
学点: 23 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-04-16
最后登录: 2014-11-03
下水道(5楼)  发表于: 2014-06-13 13:53||

研究一下
级别: VIP五级

UID: 209947
精华: 0
发帖: 60
威望: 492 点
学点: 46 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2009-12-29
最后登录: 2014-11-17
6楼  发表于: 2014-06-15 15:32||

快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快快
级别: 北风爱好者

UID: 468945
精华: 0
发帖: 2
威望: 2 点
学点: 4 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-06-15
最后登录: 2014-06-15
7楼  发表于: 2014-06-15 21:35||

看看先!!!
我的青春我做主
级别: 终身会员

UID: 162806
精华: 0
发帖: 231
威望: 2355 点
学点: 2 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2009-05-22
最后登录: 2016-01-03
8楼  发表于: 2014-06-17 05:16||

学习一下
级别: 北风爱好者

UID: 469157
精华: 0
发帖: 2
威望: 2 点
学点: 4 点
贡献: 0 点
好评: 0 点
学币: 0 个
注册时间: 2014-06-17
最后登录: 2014-06-19
9楼  发表于: 2014-06-17 13:08||

不错啊
上一主题下一主题
«12345»Pages: 1/46     Go