NHibernate的轻量级替代品
由于所有依赖关系,NHibernate并不是非常适合我们的环境。 (城堡,log4net等)
是否有一个好的轻量级替代方案?
支持简单的基于文件的数据库,例如Access / SQLite / VistaDB。
理想情况下,单个程序集中包含的仅引用.NET程序集的内容。如果只需要.NET Framework 2.0或者3.0,那么这是一个额外的好处。
解决方案
一般来说,要使数据库后端与.net一起使用,我们需要一个ADO.Net提供程序。
对于MS Access(Jet),提供程序随附.net。
对于SQLite,有一个自包含的ADO.Net Provider。
至于数据访问层库,如果要通过ADO.Net进行抽象:
- MS数据访问应用程序块,是ms企业库的一部分。
- iBatis.net(2010年由Apache基金会退休)MyBatis.net
- 来自Spring Framework.net的ADOTemplate
从Framework 2.0及更高版本开始,所有这些方法都可以正常工作。
基本上,我们可以选择(并且有很多选择)
对于性能良好且仅需单个组件的轻量级ORM,为什么不尝试从Mindscape中尝试Lightspeed。它不是开放源代码,但是可以使用源代码,并且它的价格合理,对于大多数未得到很好采用的ORM,其风险当然是质量和支持水平,.NET中值得关注的其他开放源代码ORM很少。此刻的空间。
由于我们不喜欢NHibernate的依赖关系,这听起来像我们不需要日志记录框架或者任何城堡项目方面,例如IoC,Monorail等。我们是否考虑过仅采用NHibernate的最低要求(log4net和我相信是Iesi集合,并且是来自Castle项目的动态代理吗?)并在它们之上运行ILMerge以将它们整合为一个程序集可能需要花些时间,但这并不难,或者我们也可以仅提取每个的源代码。将这些项目放入我们为组织维护的NHibernate的自定义版本中,以修剪掉项目/组织不需要的功能,这听起来并不那么困难/笨拙,我已经针对这些项目在这些方面做了一些工作,我们希望ORM的好处,但需要减小分布式文件/安装程序的大小。
我们也许还可以解释我们对基于Nhibernate的解决方案感到"沉重"的感觉……根据我的经验,与某些解决方案相比,它是一个相当轻量级的ORM框架。
一些替代方案:
ActiveRecord它在后台使用nhibernate.dll,但配置是通过属性完成的。就像nhibernate的精简版
亚音速
CoolStorage.NET我在小型项目中经常使用它。可以很好地与数据库数量一起使用
如果我们正确使用LINQ to SQL,则它可以很好地替代"笨拙的" ORM系统。
这是一大堆替代品,我建议:
- 蓄冷
- 苏达
- ODX
- 光速(8个对象以下免费)
那四个是最轻的。 Subsonic,ActiveRecord和其他产品则针对大型系统。它们在较小的系统上可以正常工作,但是(至少与ActiveRecord一起)带有大量的依赖关系和小型系统的过大杀伤力。我会使用Lightspeed并说8个对象以下的任何东西都是一个小型系统,只是简单地使用NHibernate,因为它已被广泛采用,对扩展很有好处,但短期内没有任何意义,并且在ORM和消费者之间建立一层可以解决这个问题无论如何。