Мы работаем над большим Windows-приложением .NET с очень большой базой данных.В настоящее время мы достигаем 400 таблиц и бизнес-объектов, но это, может быть, 1/4 от всего приложения.
Теперь у меня вопрос: как обрабатывать такое большое количество файлов сопоставления с помощью NHibernate с учетом производительности и использования памяти??Бизнес-объекты и их файлы сопоставления уже разделены в разных сборках.Но я считаю, что NH SessionFactory
со всеми сборками будет использовать много памяти, и производительность пострадает.Но если я строю разные фабрики только с подмножеством сборок (возможно, что-то вроде контекста домена, который разделяет сборки по логическим частям), я не могу легко обмениваться объектами между ними, и у меня есть доступ только к подмножеству объектов.
Наш текущий подход заключается в разделении бизнес-объектов с помощью атрибута context.Бизнес-объект может быть частью нескольких контекстов.Когда создается SessionFactory
, все файлы отображения данного контекста (один или несколько) объединяются в один большой файл отображения и компилируются в DLL во время выполнения.Затем Session
сам создается с помощью этой новой DLL-карты отображения.
Но у этого подхода есть некоторые серьезные недостатки:
- Разработчик должен позаботиться о ссылках на сборки между бизнесомсборки объекта;
- Разработчик должен позаботиться о контекстах, иначе NHibernate не найдет сопоставление для класса;
- Создание нового файла сопоставления происходит медленно;
- Разработчик может получить доступ только к бизнес-объектам в текущем контексте - любой другой доступ приведет к исключению во время выполнения.
Может быть, существует совершенно другой подход?Я буду рад любому новому, хотя об этом.