Обработка ошибки загрузки NHibernate - PullRequest
1 голос
/ 06 мая 2011

У меня есть следующий метод.

    public Foo GetById(int id)
    {
        ISession session = GetCurrentSession();
        try
        {
            return session.Load<Foo>(id);
        }
        catch(NHibernate.ObjectNotFoundException onfe)
        {
            throw(onfe);
        }
    }

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

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Я предлагаю вам написать свое собственное исключение ObjectNotFoundException и переписать метод следующим образом:

public Foo GetById(int id)
{
    Foo foo;
    ISession session = GetCurrentSession();
    foo = session.Get<Foo>(id);
    if (foo == null)
    {
        throw new ObjectNotFoundException(string.Format("Foo with id '{0}' not found.", id));
    }
}

Есть две проблемы с вашим методом, как написано:

  1. Вы должны использовать Get для загрузки сущности по ее ключу.
  2. Ваша обработка исключений оборачивает исходное исключение и перебрасывает без причины.
2 голосов
/ 06 мая 2011

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

Метод Get следует предпочитать, если вы не уверены, что запрошенная сущность существует.

См .: Ошибка Nhibernate: НИКАКАЯ строка с данным идентификатором не найдена , https://sites.google.com/a/thedevinfo.com/thedevinfo/Home/or-persistence/hibernate/hibernate-faq, и т.д ...

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