10分钟搞定Linq to NHibernate(一)——环境篇

       在微软发布C# 3.0后, LINQ在项目中发挥了重要作用。作为3.0语言身份的象征之一,学习LINQ有为重要。而NHibernate作为运用最广的ORM框架之一,在大型项目中广受开发人员的青睐。前不久,NHibernate Forge宣布NHiberante Linq 1.0正式发布了(参考)。 Linq to NHibernate有机的在NHibernate结合了Linq的查询功能,良好的把LINQ表达式转换为Criteria API。下面针对Linq to NHibernate做一个简单的Demo。

 

      一、建立一个类名为NHibernateHelper的类
NHibernateHelper

      二、使用sql2k自带的northwind数据中的Products表为,建立Products实体和对应的Products.hbm.xml文件加上Categories和Categories.hbm.xml。

 

Products

Products.hbm.xml


Categories

 

Categories.hbm.xml


      三、建立数据库访问层接口(IRepository)和其实现(Repository),并引入程序集(Antlr3.Runtime.dll,Castle.Core.dll,Castle.DynamicProxy2.dll,Iesi.Collections.dll,log4net.dll,NHibernate.ByteCode.Castle.dll,NHibernate.dll,NHibernate.Linq.dll)。

IRepository

 

Repository




      四、建立一个ASP.NET MVC应用程序,同样引入上述的程序集。在Global.asax配置相应的MapRoute

 

Global.asax

 
在Web.config中配置hibernate和log4net

Web.config

 


在HomeController加入如下方法
HomeController
html页面
GetAll.aspx

类似增加View:GetOrderBy,GetPage,GetWhere

      至此Linq to NHibernate就实现了。

    
      
      发表于 2009年10月16日临晨2点20,广州。

代码下载

参考http://mhinze.com/linq-to-nhibernate-in-10-minutes/

Linq To NHibernate环境下载

posted @ 2009-10-16 02:16 刘冬.NET 阅读(5689) 评论(38) 编辑 收藏

无码无真相!
 回复 引用 查看   
#2楼 2009-10-16 07:22 疯流成性      
据说只支持一些常用的sql语句。
 回复 引用 查看   
#3楼 2009-10-16 08:30 Beggar      
有机会 可以尝试一下。
 回复 引用 查看   
#4楼 2009-10-16 08:41 陈鹏(偶是坏人)      
有必要事事都往LINQ上吗?
 回复 引用 查看   
#5楼[楼主] 2009-10-16 09:17 落花吹雪      
昨天代码没传上去。接下来我会和大家一起探讨Linq to NHibernate作用域的问题
 回复 引用 查看   
#6楼 2009-10-16 09:21 CoolCode      
很好很简单,确实10分钟可以搞定
 回复 引用   
#7楼 2009-10-16 09:23 hehe1x[未注册用户]
真的是瞎折腾,简单问题复杂化
--------------------------------
虽然我不支持你的观点,但是我誓死捍卫你使用的权利

 回复 引用 查看   
#8楼[楼主] 2009-10-16 09:25 落花吹雪      
这只是入门的开篇。以后还会写Linq to NHibernate实战。
 回复 引用   
#9楼 2009-10-16 09:26 hehe1x[未注册用户]
我怎么看怎么觉得MVC是开历史的倒车
当初Asp的代码都是写在页面里的,为了解决这个问题,微软给出了基于webform的布局和代码分离的形式。

现在到了MVC了,又开始使用在页面里套服务器代码的形式,代码混编,这瞎折腾吗

 回复 引用 查看   
#10楼[楼主] 2009-10-16 09:30 落花吹雪      
可以用模板引擎。现在MVC可以结合Spring.Template.Velocity来实现NVelocity模板引擎。这样以后不仅仅页面代码分离,而且开发效率还能提高,更能提升的是可测试和扩展性。
 回复 引用 查看   
#11楼 2009-10-16 09:44 HOH      
但是牺牲的是开发效率
 回复 引用 查看   
#12楼[楼主] 2009-10-16 09:46 落花吹雪      
开发效率不低的,仅仅牺牲学习成本。
 回复 引用 查看   
#13楼 2009-10-16 10:33 不若相忘于江湖      


我更看好EF


 回复 引用 查看   
#14楼 2009-10-16 10:41 麦舒      
@不若相忘于江湖
EF 就微软自个玩玩罢了。其它数据库厂商最多也就意思一下罢了,例如 MySql 的 EF 一大堆问题。
微软已经利用 .Net ,干掉了 IDE 开发商, 现在想利用 ORM 干掉数据库厂商。EF 说是开放,其实就一套子,等着数据库开发商跳进去,对于实力弱的数据库开发商来说,跳进去是找死,(按微软的规则玩,你永远都耍不过它),不跳去是等死(市场份额给 SQL 蚕吃)。唯有 Oracle 牛B, 坚决不支持。

 回复 引用 查看   
#15楼 2009-10-16 10:41 fgmis      
学习中
Asp.Net屋---http://www.aspx58.com.cn

 回复 引用 查看   
#16楼 2009-10-16 11:10 Jeffrey Zhao      
@麦舒
Oracle不早就有EF的Provider了吗?

 回复 引用 查看   
#17楼 2009-10-16 11:11 Jeffrey Zhao      
@hehe1x
哪有服务器代码,不和webform一样,页面上只有模板标记啊。

 回复 引用 查看   
#18楼 2009-10-16 11:14 麦舒      
引用Jeffrey Zhao:
@麦舒
Oracle不早就有EF的Provider了吗?

这个 Provider 不是 Oracle 推出的。

 回复 引用 查看   
#19楼 2009-10-16 11:49 heros      
引用Jeffrey Zhao:
@hehe1x
哪有服务器代码,不和webform一样,页面上只有模板标记啊。

如果有一套标签库,并且可自定义标签就好了。就像struts一样。前台人员应用标签应该会容易一些。理想情况下可以真的前后分离。当然也只是理想了。编程总是想做的完美些,但总是觉得会有些不妥处。不过也难怪,编程的应用环境太复杂了。

 回复 引用 查看   
#20楼[楼主] 2009-10-16 11:57 落花吹雪      
.NET没有像struts的框架,但是可以把MvcContrib和Spring.Template.Velocity集合起来用。很希望微软对MVC投入多一些。
 回复 引用   
#21楼 2009-10-16 12:19 guest[未注册用户]
nhibernate 什么东西啊 谁用谁知道
 回复 引用 查看   
#22楼 2009-10-16 13:09 ︶ㄣ木べ头      
用 nhibernate 还有必要再盖一个linq吗?
 回复 引用 查看   
#23楼 2009-10-16 15:03 刘领福      
感谢楼主奉献精神
 回复 引用 查看   
#24楼 2009-10-17 15:19 不若相忘于江湖      
引用麦舒:
@不若相忘于江湖
EF 就微软自个玩玩罢了。其它数据库厂商最多也就意思一下罢了,例如 MySql 的 EF 一大堆问题。
微软已经利用 .Net ,干掉了 IDE 开发商, 现在想利用 ORM 干掉数据库厂商。EF 说是开放,其实就一套子,等着数据库开发商跳进去,对于实力弱的数据库开发商来说,跳进去是找死,(按微软的规则玩,你永远都耍不过它),不跳去是等死(市场份额给 SQL 蚕吃)。唯有 Oracle 牛B, 坚决不支持。



我个人觉得. 项目很少会碰到换数据库的可能性.

当然.. 这只是我个人的经历. 不知大家遇到此类事多不多.

 回复 引用 查看   
#25楼 2009-10-18 14:17 tandly      
@hehe1x
哥们。。你用过ASP.MVC吗?
webform 是面向事件驱动的。
MVC是面向请求驱动的。
这两者本质的区别就在于此。

 回复 引用 查看   
#26楼 2009-10-18 14:17 tandly      
@hehe1x
哥们。。你用过ASP.MVC吗?
webform 是面向事件驱动的。
MVC是面向请求驱动的。
这两者本质的区别就在于此。

点击一看,竟然是我第一个.最近跟楼主学习相同的东西.

不知道怎么搞的,一下子就座到楼主沙发了.

留下一句 无码无真相.哈哈.

老早就知道Nhibernate加了Linq特性.这不没事找事儿吗?

楼主什么看法?怪不舒服的.

不好意思,第二篇已经回答-_-!

 回复 引用 查看   
#29楼 2010-01-18 17:26 鹤冲天      
太强大了
 回复 引用 查看   
#30楼 2010-12-07 13:58 周德伦      
DBUtility.NHibernateHelper”的类型初始值设定项引发异常

我下载了nothwind.msi,但还是不行。后来修改web.config下的 <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>

我用的是sqlserver2008,跑起来了。

 回复 引用 查看   
#31楼 2011-04-14 18:05 在北落      
未能加载文件或程序集“NHibernate, Version=2.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

为什么dao那老报这个错误那

 回复 引用 查看   
#32楼[楼主] 2011-04-14 22:36 刘冬.NET      
@在北落
dll没引对或者没有引用NHibernate.dll

 回复 引用 查看   
#33楼 2011-04-15 13:48 在北落      
但是我的的确确的引用了 dll还是从李永京博客项目里边下载的

所以很莫名其妙

 回复 引用 查看   
#34楼[楼主] 2011-04-15 13:50 刘冬.NET      
@在北落
dll版本不对。

 回复 引用 查看   
#35楼 2011-04-15 15:10 在北落      
哭了! 但是我刚刚试了下 从你提供下载的示例里边的dll也不行啊
 回复 引用 查看   
#36楼[楼主] 2011-04-15 15:15 刘冬.NET      
@在北落
NHibernate.dll和NHibernate.Linq.dll都要从我的博客里下。
不过这篇文章的代码比较老,建议从我博客的《NHibernate》系列中下载代码和dll。

 回复 引用 查看   
#37楼 2011-04-15 17:22 在北落      
我换了
Remotion.Data.Linq
NHibernate-3.1.0.GA-bin
可行了 但是貌似好多linq的方法不能用会报错.....

 回复 引用 查看   
#38楼[楼主] 2011-04-15 17:25 刘冬.NET      
@在北落
库不一样,你把方法名从Ling<T>换成Query<T>就行了。