NHibernate - несколько сопоставлений баз данных в 1 классе - PullRequest
1 голос
/ 13 октября 2009

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

У меня есть 1 база данных, которая содержит множество статических данных, представьте, что это огромная база данных по поиску товаров, просто чтобы указать, что это пример сценария, мой действительный вариант немного сложнее, но принцип похож на этот ... Он размещен на совершенно другой коробке, поэтому я не могу сделать «database2.table1.somecolumn», который я заметил как возможный способ обойти проблему, если 2 БД были в одной коробке и на сервере.

В любом случае, у меня также есть другая БД, которая содержит данные, относящиеся к пользователям, поэтому представьте, что пользователь купил кучу вещей с общего веб-сайта A, у вас есть список идентификаторов, относящихся к тому, что они купили, и количество их купил, а также некоторую другую информацию, но фактические данные, относящиеся к продукту, хранятся в другой базе данных ...

Итак, если вы предполагаете, что хотите объединить эти данные в модель PreviousPurchasedProduct, которая содержит всю информацию из 1-й базы данных и дополнительные данные из 2-й базы данных, вам придется выполнить запрос, подобный следующему: (если бы они были все на одной коробке)

ВЫБРАТЬ db1.products. , db2.purchases. ОТ db2.purchases ВНУТРЕННЕЕ СОЕДИНЕНИЕ db1.products ON db2.purchases.product_id = db1.products.id ГДЕ db2.purchases.user_id = XXX;

Теперь, во-первых, возможно ли отобразить подобные вещи, даже если они находятся на отдельных хостах БД, я не догадываюсь, и если это так, вы можете достичь этой гибкости через дочерний класс. Таким образом, наличие класса продукта, который работает только на db1, и производного класса, который получает информацию о покупках, которая работает только с db2.

Также возможно ограничить часть данных db1 из операторов INSERT / UPDATE / DELETE, я почти уверен, что вы можете в отображениях по умолчанию, но так как это было бы за пределами области действия каждого класса, я не уверен, какая у меня гибкость. ..

Спасибо, что прочитали мою вафлю: D

1 Ответ

1 голос
/ 14 октября 2009

Я бы рекомендовал вам сначала понять, как решить эту проблему без NHibernate. Если у вас есть одно или несколько чистых решений, которые работают без NHibernate, вернитесь и обновите свой вопрос, чтобы сказать что-то вроде «как мне представить этот SQL в NHibernate?».

Запросы к базам данных могут быстро привести в действие специфические особенности поставщиков баз данных, и вы никогда не будете упоминать, с какими поставщиками баз данных вы имеете дело. Если обе базы данных принадлежат одному и тому же поставщику, возможно, вы сможете каким-либо образом связать базы данных, используя методы, специфичные для поставщика баз данных (но связывание не обязательно является хорошим решением, поэтому вам следует попытаться также найти альтернативы).

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