NHibernate и сначала код - PullRequest
       20

NHibernate и сначала код

8 голосов
/ 18 ноября 2010

Используете ли вы SchemaExport и SchemaUpdate в реальных приложениях? Изначально вы создаете модель, а затем генерируете схему? Это работает? Или вы используете его только для испытаний ...

Обычно я создаю БД (используя проект базы данных Visual Studio), а затем сопоставления и постоянные классы или объекты EF, используя конструктор. Но теперь я хочу попробовать первый подход кода с Fluent NHibernate.

Я исследовал SchemaExport и SchemaUpdate и обнаружил некоторые проблемы. Например, update не удаляет объекты БД, создает ненулевые столбцы, такие как nullable, если таблица существует, не генерирует первичный ключ для таблиц «многие ко многим» и так далее. Это значит, что мне приходится очень часто воссоздавать БД. Но как насчет данных? И как развернуть изменения в производственной базе данных и так далее ...

Я хочу знать, действительно ли вы сначала используете код и SchemaExport (SchemaUpdate) в своих приложениях? Может быть, вы можете дать мне несколько советов ...

Ответы [ 4 ]

8 голосов
/ 18 ноября 2010

Я использую SchemaUpdate в производстве. Это безопасно именно потому, что оно никогда не выполняет разрушительных операций, таких как удаление столбцов. Тем не менее, это не комплексное решение для обновления вашей базы данных. Если вы используете его, вам все равно придется дополнить его сценарием, чтобы обновить схему для таких вещей, как удаление (как вы упоминаете), индексы, изменение типа столбца, добавление данных таблицы и т. Д. Но SchemaUpdate покрывает 90% случай для меня.

Единственный недостаток, который я обнаружил, это то, что со временем он иногда добавляет дубликаты ограничений внешнего ключа в мою таблицу.

Еще одна вещь: вы должны запускать SchemaUpdate вручную из инструмента сборки, а не из самого приложения. небезопасно предоставлять вашему приложению права на изменение схемы БД!

4 голосов
/ 18 ноября 2010

Я использую SchemaUpdate / SchemaExport для быстрой эволюции моей модели, но они не являются заменой инструмента миграции базы данных.Как вы упоминаете, данные не могут быть перемещены разумным способом во многих случаях.У инструмента недостаточно контекста.(Например, как вы можете автоматически перенести столбец FullName на FirstName / LastName?) Я ответил на аналогичный вопрос здесь, где я обсуждаю инструменты миграции БД в контексте NHibernate.

NHibernate, ORM: как происходит рефакторингобрабатываются?существующие данные?

2 голосов
/ 18 ноября 2010

Да, вы можете использовать их в реальных приложениях;Я делаю.

Конечно, почти вся работа происходит с первого раза.Моя практика состояла в том, чтобы создать отдельный проект, который ссылается на сопоставления в моей основной сборке проекта и обрабатывает создание базы данных и первоначальный импорт данных, если таковые имеются.

Когда проект находится в производстве, я обычно выгружаю этот проект изрешение, но держите его для справки или если мне когда-нибудь понадобится перейти от создания сценариев к обновлению сценариев.

Что касается способа, которым NHibernate создает базу данных, вам нужно немного больше специфицировать в ваших отображениях Fluentчем вы могли бы.Мне нравится указывать значение null / not null, имена ограничений внешнего ключа и т. Д., Чтобы иметь максимальный контроль над способом создания базы данных.

Я не думаю, что вы когда-нибудь захотите использовать автоматическое отображение в этом сценарии.

1 голос
/ 18 ноября 2010

Просто с любым генерирующим кодом, будь то генерация poco из инструмента или генерация базы данных, как в вашем вопросе, это, вероятно, поможет вам на 80%.Оттуда было бы разумно настроить остальные 20%, чтобы добавить свои индексы и любые другие настройки производительности, чтобы сделать это правильно.

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