【问题标题】:Suggestions for pluggable database layer对可插拔数据库层的建议
【发布时间】:2011-06-18 05:41:12
【问题描述】:

我目前正在开发一个使用 SQL Server 数据库存储数据的软件项目。由于有一些计划从 SQL Server 迁移到 Oracle,因此要求之一是构建可插拔的数据库层。

所以我的问题是最好的方法是什么?

【问题讨论】:

    标签: c# architecture data-access-layer


    【解决方案1】:

    我建议将NHibernate 用于您的数据层。有了它,您可以轻松地更换配置以使用您想要的几乎任何数据库驱动程序。

    NHibernate 对 MsSQL 和 Oracle 都有很好的支持。

    您可以使用与方言无关的 Hibernates 查询语言 (HQL) 编写所有查询。另一种选择是使用 NHibernate 3 中的 linq 提供程序来获取强类型数据访问。

    正如其他人所提到的,我还建议使用存储库模式并注入工作单元或 SessionFactory。

    编辑:Oracle 现在已经发布了他们的实体框架提供者的测试版:http://thedatafarm.com/blog/data-access/oracle-entity-framework-beta-released-today/

    1:http://nhforge.org/Default.aspx## 标题##

    【讨论】:

    • 如果计划迁移到 Oracle,NHibernate 将是更好的选择。实体框架,只有第三方对 Oracle 的支持,效果不太好。
    • 提供者也不是免费的。所以我认为 NHibernate 是要走的路。
    【解决方案2】:

    我建议使用Entity Framework,它比NHibernate 容易得多,并且成熟得非常快。对于 EF 中的 oracle 支持,您需要oracle provider

    除了使用实体框架,我建议使用诸如 Repository Pattern 之类的模式。这样,您可以使用 依赖注入 来更改您选择的实现。您的应用程序变得独立于数据库或 ORM 本身。因此,如果您愿意,也可以使用 NHibernate。

    【讨论】:

      【解决方案3】:

      如果您想采用 ORM 方式,您可以按照 alexn 的建议使用 NHibernate,或者 Telerik 的 OpenAccess ORM。也有适用于 oracle 和其他 DBMS 的 EF 提供程序,但它们不是免费的。

      如果您想从头开始构建您的整个 DAL,请使用存储库模式。为存储库创建一个接口并为每个数据库创建每个存储库提供程序。 Here的讨论。

      【讨论】:

        【解决方案4】:

        你有很多选择。一种选择是使用各种对象关系映射器 (ORM) 框架之一。 NHibernate 是一个流行的,但微软的实体框架(在 v4 中)也是一个合理的可能性,它与 Linq 更好地集成,如果你感兴趣的话。

        第二个选项(不一定排除上述)是实现类似于存储库模式的东西,并通过存储库层运行所有数据库访问。有些人将 ORM 框架视为 Repository 模式的替代品;其他人看到存储库层在 ORM 框架之上增加了价值。存储库给您的真正价值是交换 ORM 层的能力。只有您知道这是否是合理的可能性,即使是,实现额外的存储库级别可能比将所有内容重新绑定到新的 ORM 需要更多的工作。

        【讨论】:

        • 我完全同意你的看法。但即使是这个解决方案也无助于将业务逻辑放入存储过程的一般习惯......
        猜你喜欢
        • 2016-05-27
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        • 2020-12-07
        • 1970-01-01
        • 2016-06-23
        • 1970-01-01
        相关资源
        最近更新 更多