0

私は PHP 出身で、複数のエンティティからのデータを 1 つのビューに表示しようとするときに、1 つのモデル/1 つのビューのアプローチに本当に苦労しています。

私は約1か月間、EFを使用してasp.net mvc 4を学習してきましたが、この問題を解決するための適切な解決策はまだ見つかりませんでした。

私の現在のアプローチは、すべてのエンティティ(DB内のテーブル)のリポジトリを作成するUnit-Of-Workを介してDBにアクセスすることです

 public GenericRepository<Domain> DomainRepository
    {
        get
        {
            if (this.domainRepository == null)
            {
                this.domainRepository = new GenericRepository<Domain>(context);
            }
            return domainRepository;
        }
    }

次に、リポジトリは特定のエンティティ (このシナリオでは DB) からのデータを保持します。

 public GenericRepository(PanelContext context)
    {
        this.context = context;
        this.dbSet = context.Set<TTypeParam>();
    }

メソッドを使用してデータなどをフィルタリングします。

単一のリポジトリを使用して特定のビューを提供することは、1 つのモデル (エンティティ) のみを使用するため、問題ではありません。

exを保持するモデルクラス(Combined)を作成しようとしているとき。2 つのモデル (Domain と Domain2) は、エンティティが存在しないため、特定のコンテキストの一部ではないため、ビューで @model namespace.Models.Combined を使用しても意味がありません。

現在、タプルを使用して複数のリポジトリからデータを取得し、それを使用して厳密に型指定されたビューにデータを入力していますが、もっと良い方法が必要であることはわかっています...

基本的に問題は、(抽象)を作成する方法ですか?モデル クラス (エンティティ)? 複数のリポジトリからのデータを保持し、特定のビューのビューモデルとして機能しますか?

助けてくれてありがとう。

4

1 に答える 1

0

まず、ビュー モデルは db エンティティではありません。これは、表示するデータを送信するために使用される単なるバケットです。コントローラーは、モデル (リポジトリー、サービス) から必要なすべてのデータを取得して、そのビュー モデルにデータを取り込みます。

したがって、ビュー モデルが結合タイプの場合、コントローラーはリポジトリに問い合わせます (これは EF のラッパーではありません。asp.net mvc サイトまたは ef チュートリアルで見た例を忘れてください。それらは間違っているため、リポジトリのアンチ ソリューションを教えてくれます)。パターン) データの場合、ビュー モデルによって必要とされる形式である場合とそうでない場合があります。そうでない場合は、リポジトリから返されたオブジェクトをビュー モデルにマップできるいくつかの拡張メソッドを作成します。

したがって、ビューモデルはビューを提供し、コントローラーによってリポジトリからのデータが取り込まれます。このように、View は View Model についてしか認識していないため、Model から切り離されます。

于 2013-10-18T19:40:44.093 に答える