Рекомендации по поддержке Oracle и SQL Server в одном приложении ASP.NET с NHibernate - PullRequest
9 голосов
/ 13 апреля 2010

Наш клиент хочет поддержать и SQL Server, и Oracle в следующем проекте.Наш опыт основан на платформе .NET / SQL Server.Мы будем нанимать разработчика Oracle, но мы заинтересованы в коде DataAccess.Сможет ли NHibernate сделать движок БД прозрачным для нас?Я так не думаю, но я хотел бы услышать от разработчиков, которые сталкивались с подобными ситуациями.

Я знаю, что этот вопрос немного расплывчатый, потому что у меня нет опыта работы с Oracle, поэтому я не знаю, какие проблемы мы найдем.

Ответы [ 2 ]

8 голосов
/ 13 апреля 2010

Вы можете легко использовать NHibernate, чтобы сделать приложение независимым от базы данных, выполнив несколько основных приемов:

  • Сначала создайте модель объекта.
  • Не используйте какой-либо специфичный для базы данных код. Вам нужен кто-то с хорошим опытом C #, а не разработчик Oracle. Не полагайтесь на такие вещи, как триггеры, хранимые процедуры и т. Д.
  • Пусть NHibernate сгенерирует схемы БД хотя бы на начальном этапе (вы можете настроить такие вещи, как индексы позже). Он выберет лучшие доступные типы данных для каждой БД.
  • Используйте независимый от DB генератор POID (hilo или guid) вместо последовательностей или идентификаторов.
  • Старайтесь избегать использования SQL. HQL и Linq работают нормально в 99% случаев.
  • Избегайте функций NH, которые не поддерживаются всеми вашими целевыми БД (например, Future, MultiCriteria и т. Д.)

У NHibernate отличное сообщество. Вы всегда можете задать свои вопросы в http://groups.google.com/group/nhusers помимо публикации здесь.

1 голос
/ 13 апреля 2010

Необходимо учитывать три вещи: объект ISession, сгенерированные запросы SQL и ваши простые старые объекты clr, которые отображаются в таблицы.

NHiberante сгенерирует требуемые SQL-запросы на основе выбранного диалекта базы данных. Если вы сконфигурируете NHibernate для использования диалекта SQL Server, он будет генерировать правильные SQL-операторы SQL-сервера. Это можно легко настроить динамически во время выполнения в зависимости от конфигурации.

Вам также необходимо настроить сеанс для подключения к нужному типу базы данных. Опять же, различные методы конфигурации могут поддерживать динамическое создание ISession во время выполнения.

Ваши фактические объекты данных, которые сопоставляются с таблицами, не должны изменяться в зависимости от выбора базы данных. Одним из преимуществ NHibernates является гибкость, которую он обеспечивает в поддержке нескольких баз данных посредством (достаточно) простого изменения конфигурации и некоторых предварительных архитектурных решений.

См. http://codebetter.com/blogs/karlseguin/archive/2009/03/30/using-nhibernate-with-multiple-databases.aspx, где приведены некоторые примеры того, как можно абстрагировать базовую базу данных от создания и использования NHibernate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...