对于ORM,公司一直在用轻量级的PetaPoco,PetaPoco是挺轻巧,易用性和性能都非常优秀。但也有很多的缺点,在组装复杂sql语句的时候有bug,记忆中使用orderby、sum的时候经常会有问题;特殊情况下数据库链接有问题:具体问题记不清了,后来同事修改源代码解决了这个问题;本身不支持linq,不过github上有人提供了linq的支持;功能少,没有内置使用缓存,虽然公司自己实现了一套对Runtime和Memche的封装的框架,但并没有封装的很强大,写数据访问层的代码时,还是需要手工通过CacheKey操作缓存。
 
    按照目前的应用场景,显然PetaPoco太轻了,相对于NH、EF,我们需要做很多额外的工作,增加了开发成本,于是就考虑换一款ORM。在.net平台上,想换个强大的,基本就是NH和EF二者择其一了。于是从网上找了许多从各方面对比二者的资料。
 
    从开发团队的活跃度来看,www.ohloh.net上的图表一目了然,基本相似,但EF有上升的趋势,而NH就不如EF(参考:NHibernate-http://www.ohloh.net/p/nhibernate ;EF-http://www.ohloh.net/p/entityframework );从开发者的讨论上看,NHibernate在11年之前很多,而之后大部分都是EF的声音,这个主要参考了stackoverflow、codeproject、infoq、博客园等。
 
    EF6很多新的功能,这也使得它更加的强大,但NHibernate可能是出现的比较早,这些功能早已经有了。在功能上的对比,这篇文章比较客观http://www.devbridge.com/articles/entity-framework-6-vs-nhibernate-4/ EF6有一点让我不大爽:本身没有提供二级缓存,虽然很有多热心的网友提出了第三方的解决方案,但要用于生产环境还是需要推敲,我貌似又没有这么多的时间去做这件事。而且,EF早就已经在这里讨论过二级缓存的必要性了,但直到现在也没有提供这项功能的迹象。
 
    还有二者性能上的对比,ORMBattle给出了比较详细的数据(不过是针对老版本的,不知道为什么一直没有更新),假行僧对ORMBattle进行了改进(EF4 vs NH3)。从这些数据上看,EF和NH在性能上应该是伯仲之间,就算把两者都提升到最新的版本,我想也是差不多的,而且实际应用中会针对具体情况优化代码,所以就没在亲自写代码测试......。好吧,我承认我有点懒。
 
    之前对这两款ORM都略有接触,觉得学习的成本NH要大些,有些概念需要理解,提供的工具不如EF。
 
    使用NHibernate的典型开源项目有:Orchard。使用EF的有:NuGetGallary。
 
    从上面的情况来看,两个都很不多,从情感上我更喜欢EF,但二级缓存是个问题。从实际情况上看,NH更适合,但又担心它的前途。思前想后,抛了几次硬币,还是用NHibernate吧,至少它是更适合现在的需求的。技术在发展,至于以后会不会再换成EF,who knows,其他的orm也说不定,只要保证Repository层的扩展性就好了。

一次简单的ORM调研的更多相关文章

  1. 一个简单的ORM制作(SQL帮助类)

    一个简单的ORM制作大概需要以下几个类: SQL执行类 CURD操作类 其他酱油类 先从SQL执行类说起,可能会涉及数据库的迁移等问题,所以需要定义一个接口以方便迁移到其他数据库, 事务没提供命名,若 ...

  2. D2010 RTTI + Attribute 简单实现ORM

    还记得David I 今年四月来盛大时,被问及“反射机制能再做得好一点吗?我们想放弃RTTI”,David I 回答“这的确是需要考虑的地方,当然RTTI我们不会放弃的”.(这个白胡子的老哥哥还真很可 ...

  3. C#基础笔记---浅谈XML读取以及简单的ORM实现

    背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...

  4. C#基础---浅谈XML读取以及简单的ORM实现

    背景: 在开发ASP.NETMVC4 项目中,虽然web.config配置满足了大部分需求,不过对于某些特定业务,我们有时候需要添加新的配置文件来记录配置信息,那么XML文件配置无疑是我们选择的一个方 ...

  5. 实现简单的ORM

    介绍 本篇将介绍实现简单的ORM,即:对数据表的通用操作:增.删.改.查 数据访问层 数据访问层类图 类说明: 1.DbProvider(供应):为数据操作提供基本对象,如:连接.操作对象.事务... ...

  6. metadata的使用以及简单的orm模式

    使用sqllite3和metadata简单的封装了个简单的orm #!/usr/bim/python #-*-coding: utf-8 -*- import threading import sql ...

  7. Delphi2010 RTTI + Attribute 简单实现ORM实例

    1.支持ORM,最基础的两个信息是表的信息和字段信息.这两个信息,如果用Attribute 来辅助,代码更简洁和可读性更好.可以把属性名当做真实字段名,也可以将特性里的属性当成真实姓名,再加上字段标题 ...

  8. 通过反射来手写简单的ORM SQlserver

    不说废话,直接上干货,如发现问题,欢迎大家指出,谢谢! //------------------------------------MySQlServerORM [简单 CURD] using Sys ...

  9. 简单理解ORM,实体类生成查询SQL语句

    目前有很多开源的ORM项目,大多情况下也不需要我们重复去造轮子,我们只需要了解轮子怎么造的,怎么用就可以,下面简单说一下怎么通过实体生成一个SQL语句: 先建立2个Attribute类,TableAt ...

随机推荐

  1. IntelliJ IDEA 2017版 导入maven项目需要的包

    1.选中项目,鼠标右键--->maven---->Reimport

  2. HDU2680 Choose the best route 2017-04-12 18:47 28人阅读 评论(0) 收藏

    Choose the best route Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Othe ...

  3. 简单配置vps,防ddos攻击

    防人之心不可无. 网上总有些无聊或者有意的人.不多说了.上干货,配置vps apf防小流量ddos攻击. 对于大流量的ddos攻击, 需要机房的硬件防火墙,vps内部可能也扛不住. 1. 安装 DDo ...

  4. [转载]SQL Server行列转换实现

    可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_ ...

  5. 使用Hbuilder将自己app发布到App Store(一)

    1.如果你有mac系统那请看第二步. 首先需要一台虚拟机,还需要个插件要不没法装,都在这链接里面了 链接:https://pan.baidu.com/s/1N_pWJWFk-EJILTXuFr6w5g ...

  6. sqlserver常用函数

    1.字符串函数 --ascii函数,返回字符串最左侧字符的ascii码值 SELECT ASCII('dsd') AS asciistr --ascii代码转换函数,返回指定ascii值对应的字符 ) ...

  7. docker-runc not installed on system 问题

    问题描述: docker运行镜像的时候,报错如下: 1 2 3 [root@etcd1 k8s]# docker run -it registry.helloworld.com/test/atsd:l ...

  8. ansible 之条件语句 when

    注册变量: 变量的另一个用途是将一条命令的运行结果保存到变量中,供后面的playbook使用.例如: - hosts: webservers tasks: - shell: /usr/bin/foo ...

  9. DP刷题

    http://blog.csdn.net/a1dark/article/details/17115137

  10. BZOJ3786: 星系探索(伪ETT)

    题面 传送门 题解 坑啊--我好像把\(Splay\)的东西全忘光了-- \(ETT\)(\(Euler\ Tour\ Tree\))是一种可以资瓷比\(LCT\)更多功能的数据结构,然而不管是功能还 ...