0

データベースから最新の5つの記事を返そうとしているので、インデックスページにあるセカンダリナビゲーションにそれらへのリンクを配置できます。Steven Sandersonの著書での提案に基づいて、MVCプロジェクトを2つのサブプロジェクトに分割しました。MVC部分であるWebUIと、EF4/ドメインモデル部分であるDomainです。

私は、主にEF4にファサードを提供し、モデル検証などの他のタスクを処理することによって、手間のかかる作業を行う基本的なリポジトリを持っています。最後の5つの記事を返す簡単なメソッドがあります。

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

私の問題は、インデックスページで他の2つの同様の機能を使用して、最新の5つのレビューとサイトニュースアイテムを表示する必要があることです。データベースに何もない場合、それらはArgumentNullExceptionsを返します(これは問題ありません)。代わりに、単純な「記事/レビュー/ニュースは存在しません」というメッセージを表示したいのですが、3つすべてが同じ例外をスローするため、正しいメッセージをキャプチャして、に基づいて正しいメッセージを表示する方法がわかりません。例外をスローしたカテゴリ。

これらのケースでExceptionをサブクラス化する必要があるかどうか、またサブクラス化する場合は、正確にどこにスローするかがわかりません。または、例外がどこから来たのかを判断して、それらを適切に処理できるようにする方法がある場合。

4

2 に答える 2

1

あなたが報告している結果には本当に混乱しています。クエリの結果がない場合、Entity Framework は空の IEnumerable を返す必要があります。この場合、ArgumentNullException がスローされるのを見たことがありません。Entity Framework テンプレートで奇妙なことをしましたか?

コードをステップ実行して、ArgumentNullException の発生元を正確に把握できるはずです。(あなたが投稿した方法の外で起こっているとこっそり疑っています)。

于 2011-04-06T00:24:50.980 に答える
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 に答える