NHibernate的轻量级替代品

时间:2008-09-18 06:45:53

标签: .net nhibernate orm

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

是否有一个很好的轻量级替代品?

支持基于简单文件的数据库(如Access / SQLite / VistaDB)至关重要。

理想情况下,包含在仅引用.NET程序集的单个程序集中的内容。如果它只需要.NET framework 2.0或3.0,那就是奖励。

8 个答案:

答案 0 :(得分:18)

大规模 - https://github.com/robconery/massive

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

两者都是单个.cs文件,没有依赖关系,除了GAC中的内容。

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

答案 1 :(得分:8)

对于性能良好且仅需要单个装配的轻量级ORM,为什么不从Mindscape尝试Lightspeed。它不是开源的,但源代码是可用的并且价格合理 - 大多数ORM的风险并未得到很好的采用当然是质量和支持水平,并且很少有其他开源ORM值得在其中打扰。目前净空间。

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

另外 - 您是否能够解释一下您对基于Nhibernate的解决方案过于“沉重”的看法......根据我的经验,它与一些相比较轻巧的ORM框架。

答案 2 :(得分:7)

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

答案 3 :(得分:2)

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

对于MS Access(Jet),提供商附带.net。 对于SQLite,有一个自包含的ADO.Net Provider。

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

所有这些都可以从框架2.0及更高版本开始。

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

以下是big list替代品,我建议使用

  • Coolstorage
  • SOODA
  • ODX
  • Lightspeed(8件或以下免费)

这4个是最轻的。 Subsonic,ActiveRecord和其他公司针对大型系统。它们在较小的系统上运行良好但是(至少对于ActiveRecord而言)具有大量的依赖关系并且对于小型系统来说是过度杀伤。我会选择Lightspeed来说8个对象以下的任何东西都是一个小系统,只是简单地使用NHibernate,因为它被广泛采用有利于缩放,但在短期内毫无意义 - 在ORM和消费者之间有一层可以工作无论如何,在那附近。

答案 6 :(得分:0)

如果你能正确使用它,LINQ to SQL可以成为“heave”ORM系统的良好替代品。

答案 7 :(得分:0)

如果您不需要功能完备的ORM,只需要通过ADO.NET快速访问数据库独立的数据层,请试用开源NI.Data library (V2)。它非常轻量级(只有一个小型程序集,没有其他依赖项),提供所有标准数据层基础结构:

  • 查询抽象和解析器的字符串表示形式称为'relex'(它看起来像:“books(rating = 5)[title,id]” - 非常好的替代Linq-to-SQL和表达式可以在飞)
  • 'view'用于封装复杂的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)。