对于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. Kali linux切换语言为中文

    echo LANG="zh_CN.UTF-8" > /etc/default/locale

  2. util:properties

    示例 <util:properties id="db" location="classpath:db.properties" /> 全部属性 功能概 ...

  3. CSS—— em的详解

    字体大小在浏览器的默认样式表中有规定.一般采用em为单位,也就是相对单位,1em=16像素. 同时,像P h1等等标签都采用浏览器默认的em单位,P为1em,h1为2em等等. 两条重要的规则: 1. ...

  4. swift UITabelVIew - 纯代码自定义tabelViewCell

    // //  CustomTableViewCell.swift //  tab // //  Created by su on 15/12/7. //  Copyright © 2015年 tian ...

  5. loadrunner - 问题汇总及解决方案(持续更新)

    1.在此界面点击Run Load Tests提示: ”Can not save the license information because access to the registry is de ...

  6. ZSTU4266 回文 2017-03-22 14:25 55人阅读 评论(0) 收藏

    4266: 回文 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 1636  Solved: 504 Description 小王想知道一个字符串是否为 ...

  7. java并发编程工具类辅助类:CountDownLatch、CyclicBarrier和 Semaphore

    在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 以下 ...

  8. Centos环境下手动设置-网络参数配置-网络挨排错顺序-设置网卡为上网模式的设定

    Linux中网络参数大致包含以下内容: IP地址 子网掩码 网关 DNS服务器 主机名(默认 localhost) 历来Linux系统中修改这些参数的方式通常有:命令.文件两种.其中通过命令设置可以立 ...

  9. oracle ebs常规小看点

      1. 在oracle applications 11i 中如何快速获得上次查询的SQL 语句 方法:我们不必使用SQL Trace 来获得,有一个简单的办法,即:帮助->诊断->检查- ...

  10. selenium 元素可以定位到,但是无法点击问题

    报错1: selenium.common.exceptions.WebDriverException: Message: Element is not clickable at point (82, ...