Как часть моего бесконечного чистилища DAL, вдохновленного NHibernate, я начал использовать шаблон Repository, чтобы держать NHibernate на расстоянии вытянутой руки от моего слоя пользовательского интерфейса. Вот пример метода Load из репозитория.
public StoredWill Load(int id)
{
StoredWill storedWill;
using (ISession session = NHibernateSessionFactory.OpenSession())
{
storedWill = session.Load<StoredWill>(id);
}
return storedWill;
}
Мне нравится тот факт, что мой сайт не знает, что такое ISession.
Естественно, я начал получать ленивые исключения инициализации, потому что описанный выше метод не загружает StoredWill, он просто возвращает прокси. Когда вы получаете доступ к свойствам прокси-сервера, вы получаете исключение, потому что вы больше находитесь в рамках ISession. Я громко рассмеялся, когда понял, что происходит.
Я исправил это с помощью:
public StoredWill Load(int id)
{
StoredWill storedWill;
using (ISession session = NHibernateSessionFactory.OpenSession())
{
storedWill = session.Load<StoredWill>(id);
string iReallyCouldntCareLess = storedWill.TestatorLastName;
}
return storedWill;
}
Но все это выглядит немного глупо . Кто-нибудь использует чуть более элегантный узор?
Люблю вас, ребята.
David