【问题标题】:n-tiers & ORM & how to implement ORMn-tiers & ORM & 如何实现 ORM
【发布时间】:2011-06-09 17:02:08
【问题描述】:

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

我听说过 ORM,并且对在我的编程中实现 ORM 很感兴趣,如何做到这一点?这对性能有影响吗?

我知道 2 ORM、NHibernate 和实体框架。来自 www.ormbattle.net NHibernate 性能不好,我认为 Entity Framework 太“年轻”,无法在 VS.NET 2008 中使用。

LINQ2SQL 怎么样,它是 ORM 工具之一吗?但是使用常规方式性能太慢了。

【问题讨论】:

  • 我建议你尝试每一个,你会发现哪个对你有好处。我认为性能取决于您如何使用 ORM 以及如何设计您的项目。一些程序员更喜欢编写自己的 ORM 来满足他们的需求。

标签: c# orm n-tier-architecture


【解决方案1】:

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

This answer 提供了一些关于使用 Subsonic 与 PetaPoco 的体验的深刻信息。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 没有理由使用反射来设置属性。您可以生成动态方法进行访问。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 2023-04-09
      • 2011-05-06
      • 2012-10-31
      相关资源
      最近更新 更多