0

このステートメントは、人とその住所および電話番号のリストを返します。

var listOfPeople = db.People.AsQueryable();

ここで、AutoMapperを使用して、上記のLINQステートメントの結果をビューモデルにマップしたいと思います。ビューモデルは、主に一部のプロパティがクライアント/ユーザーに返されないようにするために作成されました。

AutoMapperを使用して、結果を、ベースオブジェクト、、、およびのとで構成されるビューモデルにマップするにはどうすればよいですlistOfPeopleか?1人のユーザーを1つのVMにマッピングすることに問題はありません。いくつかのコレクションを含むコレクションのマッピングに夢中になっていると思います。PersonICollectionsAddressesPhoneNunmberslistOfPeople

私はASP.NET Web API 4MVC4ではなくを使用しています。

これがビューモデルです

public class BasicApiViewModel
{
    public int Id { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

   public virtual ICollection<Address> Addresses { get; set; }

   public virtual ICollection<Phone> Phones { get; set; }

}
4

1 に答える 1

0

私があなたの質問を理解した場合、コレクションのマッピングを個別に構成する必要はありません。クラス間のマッピングを定義するだけで(すでに行っているように)、コレクションは自動的に処理されます。

AutoMapperは、使用される可能性のある配列またはリストタイプではなく、要素タイプの構成のみを必要とします。たとえば、単純な送信元と宛先のタイプがあるとします。

public class Source
{
    public int Value { get; set; }
}

public class Destination
{
    public int Value { get; set; }
}

すべての基本的なジェネリックコレクションタイプがサポートされています。

Mapper.CreateMap<Source, Destination>();

var sources = new[]
    {
        new Source { Value = 5 },
        new Source { Value = 6 },
        new Source { Value = 7 }
    };

IEnumerable<Destination> ienumerableDest = Mapper.Map<Source[], IEnumerable<Destination>>(sources); 
ICollection<Destination> icollectionDest = Mapper.Map<Source[], ICollection<Destination>>(sources); 
IList<Destination> ilistDest = Mapper.Map<Source[], IList<Destination>>(sources);    
List<Destination> listDest = Mapper.Map<Source[], List<Destination>>(sources); 
Destination[] arrayDest = Mapper.Map<Source[], Destination[]>(sources);

リストと配列

于 2012-08-25T13:39:21.607 に答える