【问题标题】:Lightweight alternatives to NHibernateNHibernate 的轻量级替代品
【发布时间】:2010-09-10 13:44:49
【问题描述】:

由于所有的依赖关系,NHibernate 并不适合我们的环境。 (城堡、log4net 等)

有没有好的轻量级替代方案?

必须支持简单的基于文件的数据库,例如 Access/SQLite/VistaDB。

理想情况下,包含在仅引用 .NET 程序集的单个程序集中的内容。如果它只需要 .NET 框架 2.0 或 3.0,那就太好了。

【问题讨论】:

    标签: .net nhibernate orm


    【解决方案1】:

    一般来说,要让您的数据库后端与 .net 一起使用,您需要一个 ADO.Net 提供程序。

    对于 MS Access (Jet),提供程序随 .net 一起提供。 对于 SQLite,有一个自包含的 ADO.Net Provider。

    至于数据访问层库,如果您想对 ADO.Net 进行一些抽象:

    从框架 2.0 及更高版本开始,所有这些都运行良好。

    基本上,选择(而且有很多选择)

    【讨论】:

      【解决方案2】:

      对于一个性能良好且只需要一个程序集的轻量级 ORM,为什么不试试 Mindscape 的 Lightspeed。它不是开源的,但源代码可用且价格合理 - 大多数 ORM 未得到很好采用的风险当然是质量和支持水平,并且在 .目前的净空间。

      由于您不喜欢 NHibernate 的依赖项,听起来您不需要日志框架或任何城堡项目方面,即 IoC、Monorail 等。您是否考虑过可能只是满足最低限度的 NHibernate 要求(我相信 log4net 和 Iesi 集合,以及来自城堡项目的动态代理?)并在它们上运行 ILMerge 以将它们合并到一个程序集中 - 可能需要一些摆弄,但它并不太难 - 或者你可以只是拉这些项目中的每一个项目的源代码到您为您的组织维护的 NHibernate 的自定义构建中,该构建删除了您的项目/组织不需要的功能 - 它并不像听起来那么难/难懂,我已经按照这些思路做了一些事情一个项目,我们希望从 ORM 中受益,但需要减小分布式文件/安装程序的大小。

      另外 - 您是否能够解释一下您对基于 Nhibernate 的解决方案的感觉过于“沉重”...根据我的经验,与某些框架相比,它是一个相当轻量级的 ORM 框架。

      【讨论】:

      • Hibernate 非常好,但如果我们谈论的是高效的微型 ORM,我肯定会推荐 Dapper。通常 .net 开发人员在实体框架(代码优先)和 Dapper(数据库优先)之间进行选择
      【解决方案3】:

      一些替代方案:
      - ActiveRecord - 它在后台使用 nhibernate.dll,但配置是通过属性完成的。这就像精简版的 nhibernate
      - Subsonic
      - CoolStorage.NET - 我在小项目中经常使用它。适用于 dbs 的数量

      【讨论】:

        【解决方案4】:

        如果使用得当,LINQ to SQL 可以很好地替代“沉重”的 ORM 系统。

        【讨论】:

        • LINQ to SQL 仅支持 SQL Server - 发帖人指出,对基于文件的数据库的支持至关重要。
        • LINQ to SQL 支持基于文件的数据库 - Microsoft SQL Server Compact,证明:pietschsoft.com/post/2009/01/…
        【解决方案5】:

        这里有一个big list 的替代品,我会推荐:

        • 冷存储
        • 苏达
        • ODX
        • Lightspeed(8 个或更少物体免费)

        这 4 个是最轻的。 Subsonic、ActiveRecord 等针对大型系统。它们在较小的系统上运行良好,但(至少对于 ActiveRecord)带有大量依赖项列表,并且对于小型系统来说过度杀伤力。我会选择 Lightspeed 并说 8 个对象以下的任何东西都是一个小系统,并且简单地使用 NHibernate,因为它被广泛采用有利于扩展,但在短期内没有任何意义 - 在 ORM 和你的消费者之间有一个层可以工作反正就是这样。

        【讨论】:

        【解决方案6】:

        海量 - https://github.com/robconery/massive

        PetaPoco - https://github.com/toptensoftware/petapoco

        两者都是一个单独的 .cs 文件,除了 GAC 中的内容之外没有任何依赖项。

        (完全披露,PetaPoco 是我写的)

        【讨论】:

        • Simple.Data 可能也值得一看。
        • 任何ORM都可以做成一个.cs文件
        【解决方案7】:

        添加到此列表中,您还可以查看 Dapper(为 StackOverflow 本身编写和使用)。

        【讨论】:

        • 非常好的库 - 简单是一种失传的艺术形式!
        【解决方案8】:

        如果您不需要功能齐全的 ORM,而只需要 ADO.NET 上的快速独立于数据库的数据层,请尝试开源 NI.Data library (V2)。它非常轻量级(只有一个小程序集,没有其他依赖项),提供所有标准数据层基础设施:

        • 其字符串表示形式的查询抽象和解析器称为“relex”(它看起来像:“books(rating=5)[title,id]” - 非常好的替代 Linq-to-SQL 和表达式可以在飞)
        • “视图”概念用于封装复杂的依赖于 DB 语法的 SQL 查询
        • 数据触发器
        • 选择/更新/删除查询的数据层权限
        • 开箱即用支持 MS SQL、SQLite、MySQL、Odbc/OleDb 提供程序 (MS Access)。可以轻松添加对其他 SQL 数据库的支持。

        它的主要组件(DALC)只用一行代码初始化:

        var dalc = new DbDalc(new SqlClientDalcFactory(), connectionStr);
        

        就是这样。 如果您需要 .NET 2.0 运行时支持,您可以尝试在 2.0 运行时下编译最新的 V2 版本或使用以前的旧版本(NI.Data.Dalc,V1)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-23
          • 2011-07-18
          • 2013-08-01
          • 1970-01-01
          • 2010-09-22
          • 1970-01-01
          • 2010-09-09
          相关资源
          最近更新 更多