日期:2014-05-20  浏览次数:20756 次

大家评下 entity framework 与 NHibernate 优缺
如题 
最近企业为了快速开发需要选择一种框架 希望能达到对代码的侵入性最小
大家评下
------解决方案--------------------
以下有三篇文章从各个角度来比较EF和NH,相信对楼主有一定的帮助。
http://www.infoq.com/cn/news/2010/01/Comparing-NHibernate-EF-4
http://www.jishuhome.com/net/ef/2011/06/10/2176.html
http://news.cnblogs.com/group/topic/5734/
------解决方案--------------------
entity framework 与 NHibernate

两种成熟的框架在安全上面,在性能上面,在可扩展,可维护,成本,人力等等因素影响下,表现出来的效果完全不同,

这个只能看公司 而定,适合哪种框架的建立

当然安全第一,这个通不过是不能选的,性能第二,三分钟还不出一个页面,大家能吃半个苹果
------解决方案--------------------
两者很雷同,nh暂时领先,

nh胜出的地方:

linq语法很舒服,但是hql更强大,由于没有编译时检查,甚至可以在父对象使用子对象的属性,
对于select n+1问题,nh的批量抓取是个不错的办法,
nh有二级缓存,
ef提供了一个设计器,有了这个设计器,ef在很多实际场合变成了关系数据的附庸,失去了ORM的本性


ef胜出的地方:
ef构造.net对象的速度比nh快
ef是MS的,背后的人力财力不是nh能比的
ef在medium trust level下工作正常,nh容易出问题
------解决方案--------------------
1.敏捷生产是对所有先进的生产手段的统称,并不特指某种技术,
2.微软的ADO本来就是数据对象的统一描述和通用的数据访问层,
  它是数据特征无关的,项目无关的,
  你还能找出哪一种编程模型更加符合面向对象设计的要求  
3.之所以会有ORM或者NH之类的说法,
  是因为有些人非要说:DB映射Code或者Code映射DB,
  其实更好的设计方案是:他们两者之间没有依赖,
  你可以编写Code而不需要知道什么数据库,
  同时,做数据库开发的也不需要知道有什么代码约定,
  SOLID平时谁都会说,到实践当中就不知道用了,
  Code和DB都依赖于设计文档接口,
  只有一个原因才导致Code或者DB的迭代,那就是设计文档接口的迭代