代码之家  ›  专栏  ›  技术社区  ›  Hugo Zapata

建议在具有nhibernate的同一ASP.NET应用程序中同时支持Oracle和SQL Server

  •  9
  • Hugo Zapata  · 技术社区  · 16 年前

    我们的客户机希望在下一个项目中同时支持SQL Server和Oracle。我们的经验来自.NET/SQL Server平台。我们将雇佣一名Oracle开发人员,但我们关注的是数据访问代码。NHibernate会让DB引擎对我们透明吗?我不这么认为,但我想听听遇到过类似情况的开发人员的意见。

    我知道这个问题有点含糊,因为我没有甲骨文的经验,所以我不知道我们会发现什么问题。

    2 回复  |  直到 15 年前
        1
  •  8
  •   Diego Mijelshon    16 年前

    通过以下一些基本实践,您可以轻松地使用nhibernate使应用程序数据库不可知:

    • 首先设计对象模型。
    • 不要使用任何特定于数据库的代码。你需要一个有良好C_经验的人,而不是甲骨文开发人员。不要依赖触发器、存储过程等内容。
    • 让nhibernate至少在最初生成DB模式(您可以稍后调整索引之类的内容),它将为每个DB选择最佳的可用数据类型。
    • 使用数据库不可知点生成器( hilo guid )而不是序列或身份。
    • 尽量避免使用SQL。在99%的病例中,HQL和LINQ工作良好。
    • 避免所有目标数据库不支持的NH功能(例如,未来、多标准等)

    NHibernate有一个很好的社区。你总是可以在 http://groups.google.com/group/nhusers 除了在这里张贴。

        2
  •  1
  •   Michael Shimmins    16 年前

    有三件事要考虑:ISession对象、生成的SQL查询以及映射到表的普通旧CLR对象。

    nhibrante将根据所选的数据库方言生成所需的SQL查询。如果将nhibernate配置为使用SQL Server方言,它将生成SQL Server正确的SQL语句。这可以很容易地在运行时基于配置进行动态配置。

    您还需要配置会话以连接到正确类型的数据库。同样,各种配置方法可以在运行时支持动态ISession创建。

    映射到表的实际数据对象不需要根据数据库选择进行更改。NHibernates的一个优点是,它通过简单的配置更改和一些预先的体系结构思想,在支持多个数据库方面提供了灵活性。

    http://codebetter.com/blogs/karlseguin/archive/2009/03/30/using-nhibernate-with-multiple-databases.aspx 有关如何从创建和使用nhibernate中抽象底层数据库的一些示例。