【问题标题】:Object Relational Models (ORM) in a segregated environment隔离环境中的对象关系模型 (ORM)
【发布时间】:2012-03-26 02:07:49
【问题描述】:

我有兴趣为现有系统使用对象关系映射器,该系统是 ASP.NET 客户端、ASP.NET Web 服务中间层和 Oracle 后端。所有数据库访问都使用存储过程完成,Web 服务中不允许使用 SQL。我一直在研究 NHibernate、Telerik 的 OpenAccess ORM 和实体框架。我将其命名为“隔离”,因为数据库由 DBA 严格控制。他们还控制数据库设计并重新设计数据库以实现足够的规范化(对于对象模型)几乎是不可能的。此外,允许该工具创建任何 SQL 也是不可能的。

我的问题是:鉴于这些限制,这些工具中的哪一个可以为这种环境提供最佳集成?

【问题讨论】:

    标签: entity-framework nhibernate orm object-relational-model openaccess


    【解决方案1】:

    没有。

    通过在存储过程中完成所有操作,您不会使用 ORM 的 99% 功能。

    使用像 ServiceStack.OrmLite 或 Massive 等 Micro ORM 可能会更好......

    但是查看任何完整的 ORM,如 NH、LightSpeed、EF,完全是过度杀伤,只会为 0 增益创建更多复杂性。

    【讨论】:

    • 谢谢菲尔。我需要调查那些。我希望使用 EF 只是为了让我们保持在同一个堆栈上(而且我们很快就会迁移到 SQL Server)。
    【解决方案2】:

    完全使用存储过程实现数据访问并不意味着您不会通过使用 ORM 获得任何价值。这只是意味着您可能不会使用它的一些好处。

    至于您评估过的 ORM,您可能已经注意到:

    • 它们都支持 Database First 方法,您可以在已经定义数据库之后创建模型,因此您无需以任何方式干扰 DBA 的工作,而只需要求提供凭据
    • Entity Framework 和 OpenAccess 提供开箱即用的模型可视化表示,而 NHibernate 不提供
    • OpenAccess 和 NHibernate 支持 Oracle,而使用 Oracle 的实体框架并不那么简单
    • Entity Framework 和 OpenAccess 中的存储过程支持比 NHibernate 中的要复杂得多。在 OpenAccess 中,您甚至可以将存储过程映射到多个结果集。

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      让我做对了。你的限制是:

      • 你必须使用 ORM
      • 您不能以任何方式修改数据库。
      • 您只能使用存储过程。

      我想我同意@Phill。当你不能使用它的功能时,一个完整的 ORM 就显得过大了。

      顺便说一句,我曾经在这样的系统上工作过,在该系统中,DBA 独占鳌头,只授权程序访问数据。噩梦。

      【讨论】:

      • 是的,这是非常严格的,我已经用 ORM 创建的通用 SQL 语句进行了一些测试,它们并不比我给出的存储过程慢。另外,他们将业务逻辑嵌入到存储过程中。我希望逻辑存在于我们的中间层,并且只存在于中间层,这样我们就不会重复任何东西,这样我们就不必在测试时在两个地方查找逻辑错误。哦,好吧,我必须用我得到的东西工作!关于这个问题的好帖子:stackoverflow.com/questions/1191244/…
      • 还有 drekka,1)我不需要使用 ORM。 2) 我无法修改数据库 3) 是的,由 DBA 编写。此应用程序有很多安全限制。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2017-10-21
      • 2018-08-19
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 2016-02-21
      相关资源
      最近更新 更多