n层& ORM&如何实现ORM

时间:2011-06-09 17:02:08

标签: c# orm n-tier-architecture

通常我正在使用带有.net framework 3.5的VS.NET 2008在层(DAL,BLL,UI)中开发应用程序。对于数据访问,我使用Enterprise Library 4.1并使用log4net进行日志记录。

我听说过ORM,并且在编程中实现ORM很有意思,怎么做?这对性能有什么影响吗?

我知道2 ORM,NHibernate和Entity Framework。来自www.ormbattle.net NHibernate表现并不好,而实体框架我觉得它在VS.NET 2008中使用太“年轻”了。

LINQ2SQL怎么样,它是ORM工具之一吗?但是使用传统方式的表现太慢了。

3 个答案:

答案 0 :(得分:2)

Linq2Sql不再开发。他们可能永远不会摆脱它,但他们不再添加它了;它被弃用以支持MSEF。

NHibernate可能与任何ORM一样高效。请记住,大多数ORM使用大量反射来创建对象,获取和设置属性,消化Linq表达式等。如果不回复ADO.NET,您将无法摆脱它。

但是,NHibernate的延迟加载“PersistentBag”代理确实存在严重的“N + 1”问题。当NH从数据中实例化包含子实体集合的实体时,其子集合被设置为实际上不保存数据的代理对象;它只知道如何进行更多调用来获取数据。当您询问子集合的每个元素时,NHibernate会再次调用DB。这导致DB的总往返次数达到“N + 1”,如果您自己构建了DAL,那么您可能会在2次往返中处理相同的情况;一个用于主对象,一个用于子集合。

如果您了解此问题,可以通过编写子元素的第二个查询来解决它,而不是让NHibernate为您初始化它们。你仍然可以懒得上班。

答案 1 :(得分:2)

可能值得查看一些所谓的“微ORM”解决方案,例如DapperPetaPocoMassive,作为NHibernate,Subsonic,Linq2Sql,EF等的替代方案

This answer掌握了有关使用Subsonic与PetaPoco的体验的深刻信息。

答案 2 :(得分:0)

您可以从http://bltoolkit.net开始。良好而快速的数据访问库,具有一些不错的ORM功能。非常适合从纯ADO.NET迁移遗留代码。