5

私は MVC が初めてで、EF の使用も初めてです。私たちのアプリケーションでは、データベース ファースト アプローチを使用しています。DB ファースト アプローチを使用しているため、db から edmx を生成しています。

edmx を生成すると、データベース内のテーブルに関連するすべてのクラスが生成されます。ここでのみ、生成されたクラスをビューで直接使用するか、EF で生成されたクラスの上にもう 1 つクラスのレイヤーを作成し、それらをコントローラーとビューから使用する必要があるかどうかについて、非常に混乱しています。

エンティティの上にクラスのレイヤーをもう 1 つ作成する場合は、これらのクラス間のマッピングを処理する必要があります。モデルに変更があった場合、将来的にそれが苦痛になるとは思えません。

コントローラーからエンティティを直接使用している場合、不要なものをすべてコントローラーとビューに公開していると感じます。

誰かがこれを進める方法を教えてもらえますか?

4

2 に答える 2

3

あなたはそれをあなたが持っている方法でうまくやっています、あなたはそれを変える必要はありません。生成されたクラスを使用できるはずです。または、公開しすぎていると思われる場合は、関心のあるデータだけを入力するビューモデルを作成し、それをビューに渡すことができます。これがMVCの動作方法です。

と呼ばれるデータベーステーブルがArticlesあり、そこにビューに渡したくないものがたくさんあるとすると、次のようなビューモデルを作成できます。

public class ArticlesViewModel
{
    [Required] // this is optional, just to give you an idea of validation
    public string Title { get; set; }
    public DataTime Date { get; set; }
}

これで、コントローラーに次のようなものが表示されます。

ArticlesViewModel articleVM = new ArticlesViewModel();
// populate it from your DB

return View(articleVM);

これで、ビューにはTitleとだけが含まれるようになりました(DBから完全なものを簡単に取得できるようにするためにDateも必要です)。IDArticle

これにより、DBから必要な情報を取得するだけのアイデアが得られます。

于 2012-08-10T11:04:10.100 に答える
2

おそらく、NuGet を使用して POCO (Plain Old C# Objects - EF などの他の機能に依存しないオブジェクト) ジェネレーターの 1 つをインストールして、ビュー レイヤーが EF の知識を必要とせずにオブジェクトをビュー レイヤーに渡すことができるようにすることをお勧めします。まったく。

これは「関心の分離」または「単一責任の原則」と呼ばれます。ビューはデータを表示する方法を知っており、DAL はデータを取得して保存する方法を知っています。

EF オブジェクトをチェーンに渡す場合は、EF の知識と能力もチェーンに渡す必要があります。POCO を渡すと、これがバイパスされます。

このSOトピックを見てください:

Entity Framework 4 / POCO - どこから始めればよいですか?

于 2012-08-10T10:27:35.550 に答える