日期:2014-05-18  浏览次数:20922 次

请问各位都用什么ORM框架?
公司以前做的项目都比较小,对象转存到数据库用的老大自己写的一个ORM框架,以前并发量不大,应用环境也不复杂,所以使用起来没什么大问题。最近接到一个大项目,做第一期项目的时候发现了几点问题。
第一是 数据转为对象慢,我写一个测试程序。在同样的条件下,我们自己的ORM将数据转换为对象要40秒,Nhibernate只要15秒就可以了。
第二是 在并发比较大的情况下(不是非常大)数据会莫名其妙的被改掉,比如说我用多个线程多次通过该框架访问数据库后数据就错掉了。 
第三是 出错了信息提示不明确,因为是内部用的,有些异常直接用try catch给隐藏起来了。
第四是 在使用的过程中有可能是ORM自身的BUG,引起程序异常,这样一边要检查上层程序,同是还要去排除底层ORM的bug,这样很浪费时间的。

鉴于以上原因,我想把底层ORM给换了,用一个成熟的第三方产品。在网上搜了一下,比较倾向于以几个产品:
1 Nhibernate
原因:用的比较多,资料也比较好找。
2 Castle ActiveRecord
原因: 不用配置对象的XML文件,这点比Nhibernate爽
3 EntityFramework
原因:微软的东西(说真的,有点不想用)
4 mybaits.net
原因:我几个搞java的朋友都说他们现在不用hibernate了都在用mybaits。
就以上这些了,因为现在公司已经写了不少代码了,想换个ORM是比较得大的决定,所以想听听各位朋友的意见,你们所在公司.net都用什么ORM框架啊?方便的话请按照以下的格式回复一下,谢谢了。
如果用朋友怕泄漏公司情况的话,也可以不按照以下格式回答,自己怎么方便,怎么说,谢谢了。

使用ORM名称:
项目规模(代码行数):
所在行业:
公司.net项目组开发人员数量:

------解决方案--------------------
如果有复杂sql的话推荐用 mybatis 轻量,配置少,灵活是优点。

否则 Entity Framework 是不错的选择,Linq2EF 开发速度快。


------解决方案--------------------
1 Nhibernate
------解决方案--------------------
我不清楚为什么这么多人反对ORM。我个人有很多合理利用ORM做出若干成功产品(中型、大型都有)的经历。ORM是经过大型开发团队+专家一起研发出来的,是经过反复测试的。有现成的工具和捷径,为什么不用呢?在你拒绝一个框架前,先仔细想想你对这个框架了解多少。
------解决方案--------------------
看了这么多回复,没多少有用的,答非所问。LZ是在问你们公司在用什么orm或者是没有用orm做项目(我也想了解下这个情况)。我现在项目是没有用orm的,直接ADO,代码生成器生成部分代码,但是现在项目变大后,维护,扩展起来很不方便,开发效率跟不上,每增加一个功能都有写很多代码,周期变长了,新功能做都做不完。小项目直接ADO,大项目或者后期要自己维护的项目,用ado,事情真的很多。
------解决方案--------------------
ORM这一层不复杂。建议自己做。我自己有一套ORM 规则自己定,已经用了3、4年了。感觉不错
------解决方案--------------------
如果是.net系列,强列推荐用EF,最好用最新版本的。我做电力应用,基本没有问题。
这是我个人的几个观点:
1:EF只是一个ORM框架,只是解决仓储层的问题,到于有人说“ORM注定了业务逻辑和数据库的高度耦合”,其实是理解错了,ORM的O是数据对象,与表等有一定的偶合,但它从架构设计 上来说,只是仓储层的内聚设计,与业务逻辑无关(当然现在很多小系统会用它来直接替代业务逻辑对象),而真正的业务逻辑对象(按领域驱动设计来说)是领域对象,真正的的系统核心对象是领域对象,而数据对象是可变的,领域对象则相对稳定,数据对象到领域对象是通过仓储层的适配器来实现的。

2、EF等ORM框架的优势是减少开发难度及维护难度,性能上没有优势。一个好的系统可能要考虑设计与性能的平衡,只是谁轻谁重的问题。至于仓储层由于采用的ORM等技术带来的性能损耗,是可以通过底层数据库设计(如:视图、中间表、触发器等)和应用层的缓存等技术手段来进行弥补。

------解决方案--------------------
补充:自已做ORM框架是不明智的选择,必定会被商业的或是开源共享的所取代,再者你无法预知和跟进数据库系统本身的发展,也就注定你无法实现其相关功能。