由于所有的依赖关系,NHibernate 并不适合我们的环境。(城堡、log4net 等)
有没有好的轻量级替代品?
支持简单的基于文件的数据库,如 Access/SQLite/VistaDB 是必不可少的。
理想情况下,包含在仅引用 .NET 程序集的单个程序集中的内容。如果它只需要 .NET 框架 2.0 或 3.0,那将是一个奖励。
由于所有的依赖关系,NHibernate 并不适合我们的环境。(城堡、log4net 等)
有没有好的轻量级替代品?
支持简单的基于文件的数据库,如 Access/SQLite/VistaDB 是必不可少的。
理想情况下,包含在仅引用 .NET 程序集的单个程序集中的内容。如果它只需要 .NET 框架 2.0 或 3.0,那将是一个奖励。
大规模 - https://github.com/robconery/massive
或者
PetaPoco - https://github.com/toptensoftware/petapoco
两者都是单个 .cs 文件,除了 GAC 中的内容外,没有依赖项。
(完全披露,PetaPoco 是我写的)
对于一个性能良好且只需要一个组件的轻量级 ORM,为什么不试试 Mindscape 的Lightspeed。它不是开源的,但是源代码可用并且价格合理 - 大多数 ORM 没有被很好采用的风险当然是质量和支持水平,并且在 .目前净空间。
由于您不喜欢 NHibernate 的依赖项,听起来您不需要日志框架或任何城堡项目方面,即 IoC、Monorail 等。您是否考虑过可能只需要最低限度的 NHibernate 要求(log4net 和我相信 Iesi 集合,以及来自城堡项目的动态代理?)并在它们上运行 ILMerge 以将它们合并到一个程序集中 - 可能需要一些摆弄,但它并不太难 - 或者你可以只提取源代码这些项目中的每一个都成为您为您的组织维护的 NHibernate 的自定义构建,该构建删除了您的项目/组织不需要的功能 - 它并不像听起来那么难/难,我已经为一个项目做了一些类似的事情我们想从 ORM 中受益,但需要减少分布式文件/安装程序的大小。
另外 - 您是否能够解释您对基于 Nhibernate 的解决方案的感觉过于“沉重”……根据我的经验,与某些框架相比,它是一个相当轻量级的 ORM 框架。
添加到此列表中,您还可以查看Dapper(为 StackOverflow 本身编写和使用)。
一般来说,要使您的数据库后端与 .net 一起工作,您需要一个 ADO.Net 提供程序。
对于 MS Access (Jet),提供程序随 .net 一起提供。对于 SQLite,有一个自包含的 ADO.Net Provider。
至于数据访问层库,如果您想对 ADO.Net 进行一些抽象:
从框架 2.0 及更高版本开始,所有这些都运行良好。
基本上,你选择(而且有很多选择)
一些替代方案:
- ActiveRecord - 它在后台使用 nhibernate.dll,但配置是通过属性完成的。这就像精简版的 nhibernate
- Subsonic
- CoolStorage.NET - 我在小型项目中使用了很多。适用于 dbs 的数量
这里有很多替代品,我推荐的:
这4个是最轻的。Subsonic、ActiveRecord 等针对大型系统。它们在较小的系统上运行良好,但(至少对于 ActiveRecord)带有大量依赖项列表,并且对于小型系统来说过于杀伤力了。我会选择 Lightspeed,并说 8 个对象以下的任何东西都是一个小系统,并且简单地使用 NHibernate,因为它被广泛采用有利于扩展,但在短期内没有意义 - 在 ORM 和你的消费者之间有一个层可以工作无论如何。
如果您正确使用 LINQ to SQL,它可能是“沉重”ORM 系统的不错替代品。
如果您不需要功能齐全的 ORM,而只需要 ADO.NET 上的快速独立于数据库的数据层,请尝试开源NI.Data 库 (V2)。它非常轻量级(只有一个小程序集,没有其他依赖项),提供所有标准数据层基础设施:
它的主要组件(DALC)只用一行代码初始化:
var dalc = new DbDalc(new SqlClientDalcFactory(), connectionStr);
就这样。如果您需要 .NET 2.0 运行时支持,您可以尝试在 2.0 运行时下编译最新的 V2 版本或使用以前的旧版本(NI.Data.Dalc,V1)。