Использование lazy = "true" в моих классах приводит к тому, что мое приложение работает отлично, но производительность ужасна.Я включил это обратно, когда создавал это из учебника, и просто хотел, чтобы что-то работало как можно быстрее.(Я использовал этот урок: http://geekswithblogs.net/BobPalmer/archive/2010/04/23/mapping-object-relationships---quickstart-with-nhibernate-part-3.aspx, который был очень полезен для получения чего-то, что работало быстро)
Мне не нужно загружать все эти классы "многие к одному", когда мне просто нужноиспользовать один объект, поэтому имеет смысл снова включить отложенную загрузку.Затем я посмотрел на объекты и не увидел ничего, кроме исключений для этих классов «многие к одному» внутри моих основных объектов.Когда я пытаюсь использовать эти свойства позже, я получаю следующую ошибку:
"Could not initialize proxy - no Session."
Я предполагаю, что это означает, что сессия закрыта, поэтому происходит сбой при попытке отложенной загрузки дополнительных объектов.Мой поставщик сеансов выглядит следующим образом (так же, как и учебник):
class SessionProvider {
private static ISessionFactory _sessionFactory;
private static Configuration _config;
public static ISessionFactory SessionFactory {
get {
if (_sessionFactory == null) {
_sessionFactory = Config.BuildSessionFactory();
}
return _sessionFactory;
}
}
private static Configuration Config {
get {
if (_config == null) {
_config = new Configuration();
_config.AddAssembly(Assembly.GetCallingAssembly());
}
return _config;
}
}
}
, который затем используется моими репозиториями следующим образом:
using (var session = GetSession()) { ... }
, который получает сеанс из этой функции:
private static ISession GetSession() {
return SessionProvider.SessionFactory.OpenSession();
}
Итак, мой вопрос: что мне здесь делать?Держать сеанс открытым?Сделать это статичным во всех репозиториях?У меня недостаточно опыта работы с NHibernate, чтобы понять, как это работает.Мой приоритет сейчас - только чтение из базы данных, если это что-то меняет.Это происходит в библиотеке кода, которая в конечном итоге будет использоваться как на нашем веб-сайте, так и в различных приложениях C # .Net.