Наш клиент хочет к серверу поддержки и SQL Server и Oracle в следующем проекте. Наш опыт прибывает из платформы.NET/SQL Server. Мы наймем разработчика Oracle, но наше беспокойство с кодом DataAccess. NHibernate сделает Механизм DB прозрачным для нас? Я не думаю так, но я хотел бы получить известие от разработчиков, которые столкнулись с аналогичными ситуациями.
Я знаю, что этот вопрос немного неопределенен, потому что я не сделал, чтобы Oracle испытала, таким образом, я не знаю то, что выходит, мы найдем.
Вы можете легко использовать NHibernate, чтобы сделать ваше приложение независимым от базы данных, следуя некоторым основным практикам:
hilo
или guid
), вместо последовательностей или идентификаторов. У NHibernate отличное сообщество. Вы всегда можете задать свои вопросы в http://groups.google.com/group/nhusers, помимо публикации здесь.
Необходимо учитывать три вещи: объект ISession, генерируемые SQL-запросы и ваши простые-старые-clr-объекты, отображаемые в таблицы.
NHiberante сгенерирует необходимые SQL-запросы на основе выбранного диалекта базы данных. Если вы настроите NHibernate для использования диалекта SQL Server, он будет генерировать правильные операторы SQL SQL Server. Это можно легко настроить динамически во время выполнения в зависимости от конфигурации.
Вам также необходимо настроить сеанс для подключения к базе данных правильного типа. Опять же, различные методы конфигурации могут поддерживать динамическое создание ISession во время выполнения.
Ваши фактические объекты данных, отображаемые в таблицы, не должны изменяться в зависимости от выбора базы данных. Одной из сильных сторон NHibernates является гибкость, которую он обеспечивает при поддержке нескольких баз данных посредством (довольно) простого изменения конфигурации и некоторой предварительной архитектурной мысли.
См. http://codebetter.com/blogs/karlseguin/archive/2009/03/30/using-nhibernate-with-multiple-databases.aspx для некоторых примеров того, как вы можете абстрагироваться от базовая база данных вдали от создания и использования NHibernate.