0

我正在尝试从我的数据库中返回五篇最近的文章,这样我就可以将指向它们的链接放在我的索引页面上的一些辅助导航中。根据 Steven Sanderson 在他的书中的建议,我将我的 MVC 项目分为两个子项目 - WebUI,它是 MVC 部分,Domain,它是 EF4/Domain 模型部分。

我有一个基本的存储库来完成繁重的工作,主要是通过为 EF4 提供外观以及处理模型验证等其他任务。我有一个简单的方法可以返回最后五篇文章:

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

我的问题是我必须在我的索引页面上使用另外两个类似的功能来显示五个最近的评论和网站新闻项目。数据库中没有任何内容,它们返回 ArgumentNullExceptions(这很好)。我想做是显示一个简单的“没有文章/评论/新闻存在”消息,但由于所有三个都会抛出相同的异常,我不确定如何捕获正确的并显示正确的消息基于引发异常的类别。

我不确定我是否应该为这些情况子类化 Exception,如果我这样做了,我将把它们扔在哪里。或者,如果有办法确定异常的来源,以便我可以正确处理它们。

4

2 回答 2

1

我的猜测是 ToList() 崩溃了。

尝试这样的事情(没有运行它):

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

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

您的调用代码应该测试 null 并显示一条消息。

于 2011-04-06T00:07:35.827 回答
1

我对您报告的结果感到非常困惑。当查询没有结果时,实体框架应该返回一个空的 IEnumerable。在这种情况下,我从未见过它抛出 ArgumentNullException。你有没有用你的实体框架模板做任何奇怪的事情?

您应该能够单步执行您的代码并准确了解 ArgumentNullException 的来源。(我偷偷怀疑它发生在您发布的方法之外)。

于 2011-04-06T00:24:50.980 回答