Могу ли я использовать nHibernate с устаревшей базой данных без ссылочной целостности? - PullRequest
2 голосов
/ 26 августа 2009

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

Кроме того, SP содержат не только CRUD-операции, но и бизнес-логику ...

Я начинаю думать, что придерживаться пользовательского DAL ado.net будет проще: (

Приветствия

Олли

Ответы [ 2 ]

1 голос
/ 26 августа 2009

Вы, скорее всего, CAN . Но вы, вероятно, не должны: -)

Hibernate не заботится о ссылочной целостности как таковой; в то время как очевидно, что он должен иметь какую-то связь между связанными таблицами, не имеет значения, существует ли фактическое ограничение FK. Например, если Product отображается как many-to-one в Vendor, таблица PRODUCTS должна иметь в своем роде VENDOR_ID, но это не обязательно FK.

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

Наконец, если ваши SP действительно используются для ALL CRUD-операций (включая все возможные запросы), вероятно, просто не стоит пытаться вводить Hibernate в микшере - вы ничего не получите и у вас будет еще один слой для работы.

0 голосов
/ 27 августа 2009

хорошо, пример проблемы такой:

SP использует оператор sql, подобный следующему, чтобы выбрать следующий Id для вставки в столбец «Id» таблицы (этот столбец является просто столбцом int, но НЕ столбцом идентификаторов),

оператор: 'select @cus_id = max (id) + 1 из клиентов ",

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

Когда я отобразил это в NH с помощью беглого NH, карта сгенерировала корректный SQL-оператор вставки для первой таблицы, но когда вторая таблица была отображена как «Ссылка», был создан SQL-оператор «обновления», я был ожидая увидеть оператор вставки ...

Теперь тот факт, что нет столбцов идентификаторов, ключей и ссылочной целостности, означает для меня, что я не могу гарантировать, что отношения один-к-одному, один-ко-многим и т. Д. *

Если это правда, как NH (свободно) может конфигурировать ...

Приветствия

Олли

...