Работа вокруг ArgumentNullException - PullRequest
0 голосов
/ 06 апреля 2011

Я пытаюсь вернуть пять самых последних статей из моей базы данных, чтобы я мог разместить ссылки на них в какой-нибудь дополнительной навигации, которую я имею на моей странице индекса. Я разделил свой проект MVC на два подпроекта, основываясь на предложении Стивена Сандерсона в его книге - WebUI, который является частью MVC, и Domain, который является частью модели EF4 / Domain.

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

public List<Article> LastFive()
{
    return _siteDB.Articles.OrderByDescending(a => a.LastModified).Take(5).ToList();
}

Моя проблема в том, что мне нужно использовать две другие похожие функции на моей странице указателя, чтобы показать пять самых последних обзоров и новости сайта. Не имея ничего в БД, они возвращают ArgumentNullExceptions (что нормально). Что бы я хотел бы сделать, это вместо этого отобразить простое сообщение «Нет статей / обзоров / новостей существует», но, поскольку все три будут выдавать одно и то же исключение, я не уверен, как захватить правильное и отобразить правильное сообщение в зависимости от категории, которая вызвала исключение.

Я не уверен, должен ли я подкласс Исключение для этих случаев, и если я сделал, точно, где я бы бросил их. Или, если есть способ определить, откуда возникло исключение (я), чтобы я мог обработать их правильно.

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

Я действительно запутался в результатах, о которых вы сообщаете.Entity Framework должен возвращать пустой IEnumerable, если по запросу нет результатов.Я никогда не видел, чтобы это вызывало ArgumentNullException в этом случае.Делали ли вы что-то странное с вашими шаблонами Entity Framework?

Вы должны быть в состоянии пошагово просмотреть свой код и понять, откуда именно возникает ArgumentNullException.(У меня есть подозрение, что это происходит за пределами того метода, который вы опубликовали).

1 голос
/ 06 апреля 2011

Я предполагаю, что это сбой ToList ().

Попробуйте что-то вроде этого (не запустил):

public List<Article> LastFive()
{
    var result =  _siteDB.Articles.OrderByDescending(a => a.LastModified).Take(5);

    if (result != null)
        return result.ToList();
    else
        return null;
}

Ваш код вызова должен проверить на нулевое значение и показать сообщение, если так.

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