2011-09-29 12 views
1

MVC3アプリケーションのViewModelとAutoMapperの設計方法でEFを使用しています。ViewModel CRUDページを含むASP.NET MVC3エンティティ

CRUDページを作成するより効率的な方法があれば、私が現在行っていることが分かります。

私の現在のプロセスが含まれます。

  • エンティティ
  • を作成してコピーペースト経由のViewModelを作成し、その後を介してコントローラを作成し、コンテキストリスト
  • にエンティティを追加
  • 非必須フィールドを削除Visual Studio 2010コントローラウィザードページを作成します。
  • 私は、Entity Frameworkを使用して、読み書き操作とビューを持つコントローラのテンプレートを選択します。
  • 自分のモデルを自分のエンティティではなく、自分のViewModelにすることを選択しました。
  • 適切なコンテキストを選択します。

return View(db.BlockedUserViewModels.ToList());

へ:

  • 今、私が思うに、私は別れる部分が向上させることができ、私はAutoMapperと変化するエンティティ/のViewModelデザインパターンを使用するために、すべてのCRUDメソッドを再記述する必要があります:

    IList<BlockedUser> blockedUsers = db.BlockedUsers.ToList(); 
    IList<BlockedUserViewModel> blockedUserVMs = AutoMapper.Mapper.Map<IList<BlockedUser>, IList<BlockedUserViewModel>>(blockedUsers); 
    return View(blockedUserVMs); 
    
    • 私は、各コントローラのCRUDオプションに同じ[オーソライズ]とロールの権限を追加する必要があります。

    これは作業負荷が過剰であるようです。私はもっ​​と良い解決策を望んでいる。 (私はPython/Djangoから、きれいな強力なCRUDページを作成するためのコードを1行必要としています)

  • 答えて

    2

    あなたがサービスを追加し、コントローラにそれを注入することができますように聞こえます。これは、あなたがそれを繰り返す必要はありませんので、あなたのCRUDロジックを維持するための場所としてあなたのコントローラ光と行為を続ける

    IList<BlockedUser> blockedUsers = db.BlockedUsers.ToList(); 
    IList<BlockedUserViewModel> blockedUserVMs = AutoMapper.Mapper.Map<IList<BlockedUser>, IList<BlockedUserViewModel>>(blockedUsers); 
    

    :次に、あなただけの

    var model = _service.GetBlockedUsers(); 
    

    毎回の代わりを呼び出す必要がありますどこにでも。

    コントローラのすべてのアクションに適用される場合は、コントローラに[Authorize]属性を追加することもできます。

    +0

    良い点、私はこれを提供するパッケージを探している簡単な解決策を見落としました。これらのユーティリティメソッドをコンテキスト内に置くことは適切ですか?コントローラーについてのヒントをありがとう[Authorize]属性、残念ながら、それらは一貫していません。 – Valchris

    +0

    これは実装によって異なります。私はエンティティでリポジトリパターンを使用してCRUD操作を管理し、サービスはリポジトリの周りのラッパーであり、エンティティを関連するビューモデルにマップします。 – shuniar

    +0

    あなたの説明のチュートリアル/例を知っていますか?私はリポジトリ機能についての言及を読んだが、複雑さの追加された層の利点を完全に理解していない – Valchris

    1

    これは本当にどれくらいの痛みがあるかによって決まりますが、いつもMVCスキャフォールドNugetとSteven Sandersonによって書かれた。時間をかけて投資すれば、長期的には助けになるかもしれませんが、それがあなたのために適切かどうかを判断する必要があります。

    http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/

    +0

    私はこの前に簡単に見てきましたが、これは間違いなく私が探していることをする能力があるようですが、スクラップホルダーをゼロから書く必要があります。 AutoMapperでスキャフォールディングの作業をしてコードを提供してくれた人がいるはずです。 – Valchris

    +0

    おそらくあるかもしれませんが、あなたのコードを書くことはあなたのコードと他の人との違いを扱いやすくします。 –

    関連する問題