0

複雑な ViewModel を作成するための正しいアプローチを見つけるのに苦労しています。

モデル クラス B:

public class A{public int A_id;}
public class B{
 public int B_id; 
 public string Name; 
 public virtual ICollection<A> A_Items;
}

ViewModel クラス C:

public class C {public int B_id; public CountOfA;}

そのため、A の出現回数を B のクラスに含め、それを ViewModel クラス C に入れる別の方法を見つけようとしています。現在、このようにカスタム IResolver クラスを作成することでそれを行うことができます。

CreateMap<B,C>().ForMember(dest => dest.CountOfA, opt => opt.ResolveUsing<ListToCountResolver>());

そのため、コントローラーで「Include」メソッドを使用して「A_Items」を含めると、これは正常に機能します。しかし、行の単純な COUNT(*) だけが必要な場合に、DB からリスト全体を取得するのではなく、より良い方法が必要です。または、B クラスからカスタム値を取得しようとするたびに、カスタム リゾルバーを作成する必要がありますか。行数の取得は単なる例ですが、「A」コレクションの「名前」を AutoMapper を使用してコンマで区切られた単一の文字列に変換したい場合はどうでしょうか。それは可能でしょうか?参考までに、私は MVC の世界にかなり慣れていないので、「リーン コントローラー」、「ファット モデル」、および「ダミー ビュー」の設計提案にとどまろうとしているので、良い実践に従うことができます。ご意見ありがとうございます。

4

1 に答える 1

1

次のような単純なMapFrom実装を使用できますか。

Mapper.CreateMap<B, C>().ForMember(dest => dest.CountOfA, opt => opt.MapFrom(src => src.A_Items.Count()));

小さな単体テストを作成しましたが、正常に動作します。

var b = new B {A_Items = new Collection<A>{new A(), new A(), new A()}, B_id = 1};

var c = Mapper.Map<C>(b);

c.CountOfA.Should().Be(3);
c.B_id.Should().Be(1);
于 2013-01-04T01:05:17.660 に答える