2012-08-10 19 views
5

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

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

エンティティの上にもう1つのレイヤーのレイヤーを作成する場合は、これらのクラス間でマッピングを行う必要があります。モデルに変更があれば、将来的にはそれが痛みになることはないだろう。

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

誰かがこれを進める方法についてアドバイスできますか?

答えて

3

あなたはそれを持っているだけでどのように、あなたがそれを変更する必要はありません罰金それをやっています。生成されたクラスを使用できるはずです。あまりにも多く露出していると思われる場合は、気になるデータだけを入力してビューに渡すビューモデルを作成できます。これは、MVCが動作する方法です。

は、データベーステーブルがArticlesと呼ばれ、多くのものは、あなたがビューに渡すwan'tしないことがそこにあり、あなたがこの

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; } 
} 

などのビューモデルを作成することができます持っていると言いますだから今、あなたのビューのみTitleDateを持っている、(あなたもIDを持っている必要がありますので、フルを取得することができ

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

return View(articleVM); 

:今、あなたのコントローラであなたはこのようなものを持っているでしょうDBからのを簡単に参照してください。)

ThisあなたのDBから必要な情報を取得するというアイデアが得られます。

+0

記事クラスから離れて、あなたはArticlesViewModelクラスを持っており、あなたはモデルクラスを表示するために公開しています。そして、最初のステップでデータを取得するときに記事を取得し、記事からArticleViewModelを取得します。私が間違っていれば私を修正してください。 – Naresh

+0

はい、デフォルトのMVC3アプリで 'AccountModels.cs'を見てください。これらは、ユーザーが表示および変更できる情報のみを公開します。その後、投稿で、 'Membership'(私は考える)テーブルを更新します。メンバーシップには、ユーザー名、パスワードなどよりも多くのプロパティが含まれています。 http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/adding-a-modelを参照してください。 –

2

NuGetを使用して、POCO(Plain Old C#Objects - EFなどの他の機能に依存しないオブジェクト)のいずれかをインストールして、Viewレイヤーを使わずにオブジェクトをViewレイヤーに渡すことができますEFの知識が必要です。

これは「懸念の分離」または「単一責任の原則」と呼ばれ、データの表示方法を知っており、DALはデータの取得および保存方法を知っており、どちらも親密なビットを知る必要はありません他の仕事。

チェーンの上にEFオブジェクトを渡す場合は、チェーン通過POCOがこれを回避するように、EFの知識と能力も渡す必要があります。

は、このSOトピックを見てみましょう:

Entity Framework 4/POCO - Where to start?

+0

私が知っているところでは、コードファーストアプローチの場合はPOCOを使用します。私が間違っていれば私を修正してください。 – Naresh

+0

POCOジェネレータをインストールすることで、データベースファーストプロジェクトでPOCOを使用できます。このようにいくつかの主要プロジェクトがあります。 – Moo

+2

EF4.x DBContextジェネレータはPOCOジェネレータと似ていますか? – Naresh

関連する問題