Медленный запуск NHibernate, условная загрузка HBM и «Связи ссылок на не сопоставленный класс» - PullRequest
1 голос
/ 13 сентября 2010

Фон

У нас есть несколько проектов / приложений, работающих на одной модели.Все они имеют свои уникальные сущности / таблицы, но также имеют одну общую сущность / таблицу.Т.е. сущности, требуемые приложением A, никогда не потребуются приложением B, за исключением общей таблицы, и наоборот.Теперь общая таблица имеет отношения к таблицам приложения A, а также к таблицам приложения B.При загрузке большого количества HBM дела идут довольно медленно, поэтому мы внедрили систему, которая загружает только HBM, требуемые приложением, которое запущено в данный момент.

Проблема

В приложении A, когда мы теперь обращаемся к общей таблице / сущности, например:

session.Linq<CommonEntity> ().Where (...);

Мы получаем следующее исключение

NHibernate.MappingException: Ассоциация ссылается на не отображенный класс: (сущность приложения B)

Я надеялся, что NHibernate сломается, только если мы явно попытаемся получить доступ к таблицам приложения B через отношения из общей сущности, и что в результате он не сломается, потому что мыникогда не делайте этого из приложения A. Но, увы.

Вопрос

Есть ли способ настроить NHibernate, чтобы отложить проверку сопоставления отношений до тех пор, пока к нему нет доступа?

Мы используем ленивую загрузку.

Ответы [ 2 ]

2 голосов
/ 13 сентября 2010

Конфигурация является одноразовой операцией, и конфигурация должна быть согласованной на 100% при создании SessionFactory.

Если это все еще слишком медленно для вас, конфигурация может быть сериализована. Смотри http://github.com/ayende/Effectus/blob/master/Effectus/Infrastructure/BootStrapper.cs

1 голос
/ 16 сентября 2010

Я не знаю способа отложить проверку, но я так не думаю.

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

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

Таким образом, каждое приложение имеет свой собственный непротиворечивый набор сущностей и просто игнорирует несопоставленные столбцы.

...