【问题标题】:Easiest to learn and use .NET ORM framework? [closed]最容易学习和使用的 .NET ORM 框架? [关闭]
【发布时间】:2009-02-17 17:50:52
【问题描述】:

注意:现在来回答这个问题的人,请注意日期。这个问题已经有将近4年的历史了,信息也比较过时。根据我的经验,NHibernate 现在相对容易使用(具有流畅的界面),Entity Framework 是一个合法的竞争者,而诸如 Dapper 和 Massive 之类的 MicroORMS 正变得非常流行。


我们正在重写我们的核心 Web 应用程序之一,我终于从管理层那里得到了所有信息,用 ORM 框架替换可怕的存储过程,以实现我们的数据访问层。

我万岁。现在我必须选择一个。

我已经玩了一点以下

现在我知道 NHibernate 是真正的 Alt.Netty 选择,但问题是我正在与据我所知从未听说过它的承包商合作,而且 NHibernate 以相当长的学习曲线而闻名。与此同时,亚音速似乎是一种更直接的方法。我也知道Entities Framework,但对它的“meh”接收和Linq to Oracle 持谨慎态度,但我对我几乎没有听说过任何消息这一事实保持警惕。

所以问题是:

  1. 我还应该考虑其他框架吗?
  2. 您对我的情况有什么建议?

更多注意事项:

  • 当我说我玩过这些框架时,我是认真的。我已经对它们进行了配置并使用它们来提取一些数据以确保一切正常。这就是它的程度。
  • 这是一个 Oracle 数据库(您可能已经从包含 Linq2Oracle 中猜到了)
  • 由于这是一次重写,因此数据库已经存在并且具有稳定的架构
  • 我不太担心性能。我们的应用程序通常一次最多为几个人服务。
  • 你们将不得不回答我将要提出的大量问题

我倾向于 Subsonic,但我很好奇人们可能会说什么。

【问题讨论】:

  • @Omu - 有趣的小实用程序,但绝不是 ORM
  • 它不是 ORM,但如果您需要完全控制您的 sql,它会更好
  • 比什么好?将关系存储映射到对象并不好。您是说 ORM 并不适合所有情况吗?在这种情况下,我同意。
  • +1 用于在事后维护职位

标签: .net orm


【解决方案1】:

您查看Telerik's OpenAccess ORM 了吗?他们最近收购了 Vanatec 及其 ORM 产品。它支持多个数据库平台(包括 Oracle)、LINQ 支持、正向和反向映射,与 Visual Studio 集成,并且在我看来(当然我有些偏见)是 LINQ to SQL 的合适替代品,如果那是“易于使用”,您正在寻找。

【讨论】:

  • Telerik 提供强大的支持,因此如果您与分布式团队合作,这应该会有所帮助。
  • 它包括Oracle,但仅适用于快速版。除非您付费,否则它不包括其他版本的 oracle。仅供参考
  • OpenAccess 的免费版本适用于任何免费的数据库版本(SQL Server Express、Oracle XE、MySQL)。如果您使用的是专业或企业级数据库解决方案(SQL Server、Oracle 等),那么您必须购买 OpenAccess。
【解决方案2】:

NHibernate 可让您将域实体与数据层分离。它使用 XML 映射文件来描述关系,并使用 Castle DynamicProxy 来魔术延迟加载的属性。

NHibernate 在性能、灵活性和可配置性方面领先其他所有人几代。但是,正如您所说,这很复杂。 SubSonic 非常简单,但它基本上是根据您的数据库生成静态代理类,因此您不会真正让 RM 脱离 ORM。 IMO SubSonic、L2S 和 Castle ActiveRecord 都是 DAL 生成器,而不是 ORM。

IMO 这一切都取决于您的需求。如果您说的是 2 层,则选择其中一个 DAL 生成器。它会让你移动得更快,而且你的模型可能不会那么复杂,以至于你不能只从你的数据库模式中生成它。如果你有 n 层,我强烈推荐 NHibernate。当然,学习曲线更高(它不是火箭科学,但也不是按钮),但它实际上可以处理你需要的工作,如果你使用其他的一个,你最终会做很多反正都是手动的。

【讨论】:

  • 我认为在亚音速的情况下,我的每个存储库都会调用亚音速查询并将它们映射到我的域实体。在 activerecord 和 L2O 的情况下,我会将这些类用作 DTO 并在我的存储库中映射。
  • 我知道这需要更高的维护,但对我来说最重要的是简单。
  • 问题是你想要简单的地方。我看到数百行左侧 = 右侧对象映射比 sql 更复杂且更难维护,特别是如果您的域模型中有从多个表中提取的对象。
  • 话虽如此,我现在已经在几个项目中使用了亚音速,但没什么好说的。
【解决方案3】:

CoolStorage.NET 是我的推荐。如果您坚持使用 .NET,这是最简单的功能完整解决方案。

【讨论】:

  • 没听说过,但会看看。支持社区怎么样?
  • 由于它是开源的,我敢打赌将原生 sqlclient bingings 移植到 oracle equivs 不会那么困难。至于社区,我发现它非常活跃。
  • 另外,我很抱歉没有更多地消化您的请求,我知道它们涵盖了大多数基础,但它表明当您没有做足够的努力时,它总是会被咬。
【解决方案4】:

Checkout XmlDataMapper 一个简单的免费 ORM(LGPL 许可证),与其他巨头相比,它的内存占用量较低。 提供的示例项目应该足以开始使用。

要集成 XmlDataMapper,您只需 4 个小步骤

  1. 为表创建业务实体/DTO
  2. 使用表和 DTO 之间的映射信息创建一个 XML 文件。
  3. 在配置中指定 DTO 和 xml 文件。
  4. 只需调用 DTOConverter.Convert(dataReader) 等方法即可将您的数据库记录转换为 DTO/业务实体

【讨论】:

    【解决方案5】:

    我会重新考虑您对 Microsoft 实体框架的评价。您可以使用 DevArt 的针对 Oracle 的 DotConnect 提供程序作为解决方案,直到 Oracle 将来发布自己的提供程序。使用实体框架,您将不会使用“Linq to Oracle”,而是使用“Linq to Entities”,这是一个更好的解决方案。

    我使用实体框架测试读取操作的结果非常好,其中读取操作比其 SqlCommand\SqlDataReader 等价物快约 700%。

    【讨论】:

    • 就像我说的,性能不是问题,但来自 Alt.Net 社区的一些批评是。
    • 当然,他们的担忧是正确的,我希望稍后会在 .NET 4.0 中解决。他们的关注点主要在于将实体框架与现有类一起使用,因为 EF 要求它创建的每个实体都有一个基类。有些人不喜欢那样。
    【解决方案6】:

    考虑 ORM 时的问题是

    • 找到有关它的好信息。示例,学习资料。
    • 用的人够多(产品成熟吗)?使用它的公司越多,发现错误的可能性就越大。

    当我查看 .Net 的 ORM 市场时,我发现关于 NHibernate 的材料越来越多

    Links to helpful material about Nhibernate

    Castle 建立在 NHibernate 之上(它使用 Active Record 模式)

    google 一下,看看 ORM 是否有任何工具可以帮助您更快地开发。

    • Telerick 说它带有 VS 集成
    • Nhibernate 有几个工具可以将 DB 逆向工程为类,还有 NHProf(不是免费的)可以监控 NH 和 SQL 之间的 SQL

    如果你没有进入 XML 映射文件,看看你是否可以找到一个 Fleunt 映射。这应该意味着编译时检查(有些人发现这更容易调试/重构代码)

    fluent nhibernate

    HTH

    骨头

    【讨论】:

    • 我很清楚自从我上次在八月份尝试学习 NHibernate 以来,已经有了关于 NHibernate 的精彩文章,但它真的容易上手吗?承包商真的会通过 50 页的教程来了解这个概念,以便他们可以应用它吗?我不知道...
    • 你说得对,手册很大,但是那里有很多示例项目可以快速演示这个概念。看看代码项目上的 Sharp Archecture。也请不要对文档产生兴趣,我还提到了工具和映射方式(XML/代码),这些也是很好的因素。
    猜你喜欢
    • 2011-05-31
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2010-10-13
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    相关资源
    最近更新 更多