代码之家  ›  专栏  ›  技术社区  ›  driis

您会选择什么ORM来处理遗留数据库?

  •  2
  • driis  · 技术社区  · 15 年前

    我正在集成一些遗留系统。它们每个都有不同的数据库;我需要为它们中的大多数编写数据访问代码。

    无法更改数据库架构(我可能可以应用一些索引等,但表及其列必须保留结构)。一些数据库设计良好,具有适当的关系和主键/外键,而其他一些数据库则非常缺乏。

    您将为此任务选择哪个ORM?我想在整个项目中使用相同的ORM;我的要求是:

    • 能够在代码中重命名表或列;但在数据库中保留旧名称。
    • 合理的代码生成
    • 高效的LINQ支持(针对数据模型的LINQ查询应转换为高效的SQL)。
    • 生成的数据类最好是 POCO's .
    • 最好支持不同的数据库引擎。

    我目前对LinqToSQL有着最丰富的经验;但我觉得这可能是这个项目的错误选择。我愿意花些时间学习一个新的框架。

    6 回复  |  直到 15 年前
        1
  •  3
  •   ConcernedOfTunbridgeWells    15 年前

    我想ORM给你带来的麻烦可能比它省下的要多。如果您有几个不同的遗留数据库,其中一些设计不好,那么您可能会发现在较低的级别上构建数据访问层比ORM更容易。Fowler Patterns of Enterprise Application Architecture 在对构建数据访问层的各种方法进行编目方面做得相当好。

    一些数据访问层可能适合代码生成解决方案;但是,各种模式的存在(如您所说,有些混乱)表明,一种“一刀切”的方法可能不起作用,或者可能需要付出不成比例的努力使其与所有遗留数据库都能很好地配合使用。

        2
  •  1
  •   James Avery    15 年前

    NHibernate将是您的最佳选择,它提供Poco支持,包括对我所知道的每个数据库的支持,而且Linq支持是足够的。听起来你会想要生成你的映射文件,有一些模板可以用于mygeneration和codesmith,这将帮助你做到这一点,避免大量的手工工作。(在初始生成之后,很容易调整和更改表名、关系等,这在大多数基于生成的框架中都很难做到)

        3
  •  0
  •   John Saunders    15 年前

    LINQ to SQL仅与SQL Server一起工作。ADO.NET实体框架与ADO.NET支持的任何数据库一起工作。

    我在您的列表中看到的唯一没有实现的就是类不是POCO。尤其是,在Web服务中公开它们中的一个是一个坏主意,因为实现特定的数据也将被序列化。

        4
  •  0
  •   JoshBerke    15 年前

    NHiberinate符合您的大部分要求。唯一的限制是Linq;但是,他们有一个全职开发人员,由一个发起人捐赠,负责添加对Linq查询的支持。

    它支持很多数据库引擎,它是免费的,它可以使用poco的,它有很多钩子,可以使不同的部分扩展。

        5
  •  0
  •   Jamie Ide    15 年前

    在我看来,最重要的因素是您计划实现一个域模型还是将表直接映射到数据传输对象(DTO)。如果你要模拟这个领域,那么我绝对推荐NHibernate。如果您要使用DTO,那么有许多好的候选者,包括实体框架和数据表。

        6
  •  0
  •   rball    15 年前

    我猜你在和C合作?

    我想说,也许可以试试亚音速,当数据库已经存在时,这是一个很好的选择,特别是在处理存储过程和视图时。没有可以像nhib那样配置的XML,您可以在几个小时内(如果您知道自己在做什么的话,可以在20分钟内)启动并运行它。它还支持一些数据库。

    我相信Rob和Co.现在加入了Linq部分,这样可能也会出现在其中,但这将是我还没有尝试过的最新产品的一部分。

    http://subsonicproject.com/