我正在尝试从我的数据库中返回最近的五篇文章,因此我可以在索引页面上的某些辅助导航中添加链接。我把我的MVC项目分成了两个子项目,基于Steven Sanderson在他的书中提出的建议 - WebUI,它是MVC部分,以及Domain,它是EF4 / Domain模型部分。
我有一个基本的存储库来完成繁重的工作,主要是为EF4提供一个外观,并处理其他任务,如模型验证。我有一个简单的方法返回最后五篇文章:
public List<Article> LastFive()
{
return _siteDB.Articles.OrderByDescending(a => a.LastModified).Take(5).ToList();
}
我的问题是我必须在索引页面上使用另外两个类似的功能来显示最近的五个评论和网站新闻。在db中没有任何内容,它们返回ArgumentNullExceptions(这很好)。我喜欢要做的是显示一个简单的“没有文章/评论/新闻存在”的消息,但由于这三个都会抛出相同的异常,我不确定如何捕获正确的并根据引发异常的类别显示正确的消息。
我不确定我是否应该为这些情况继承Exception,如果我这样做的话,我确实将它扔到了哪里。或者,如果有办法确定异常的来源,我可以正确处理它们。
答案 0 :(得分: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并显示消息(如果是)。
答案 1 :(得分:1)
我对你报告的结果感到很困惑。当查询没有结果时,实体框架应该返回一个空的IEnumerable。在这种情况下,我从未见过它抛出ArgumentNullException。你有没有对你的Entity Framework模板做过任何奇怪的事情?
您应该能够逐步完成代码并回到ArgumentNullException的确切位置。 (我有一种潜在的怀疑,它发生在您发布的方法之外)。