1

わかりました、私がしなければならないことの良い例を見つけるのに本当に苦労しています。じゃ、ここで質問します。

Customer という名前のエンティティ クラス (EF) と、CustomerViewModel という名前の対応するビュー モデル クラスがあるとします。

AutoMapper を使用して、次のマッピングを作成しました。

 Mapper.CreateMap<CustomerViewModel, Customer>(); 
 Mapper.CreateMap<Customer, CustomerViewModel>();

このマッピングを利用するには、次のコードをどのように変更すればよいでしょうか?

    public static List<CustomerViewModel> GetCustomers()
    {
        using (var context = new GCSBaseEntities())
        {
            var query = from c in context.Customers
                        select new CustomerViewModel
                        {
                            CompanyName = c.CompanyName,
                            Id = c.Id,
                            EmailAddress = c.EmailAddress,
                            FirstName = c.FirstName,
                            LastName = c.LastName,
                            MiddleName = c.MiddleName,
                            ModifiedDate = c.ModifiedDate,
                            Phone = c.Phone,
                            SalesPerson = c.SalesPerson,
                            Suffix = c.Suffix,
                            Title = c.Title,
                            FullName = c.FirstName + " " + c.LastName
                        };

            return query.ToList();
        }
    } 

前もって感謝します。

4

2 に答える 2

2

マッピングを登録するときは、必要な複雑なマッピング操作を提供する必要があります。あなたの場合、 を除くすべてのプロパティが一致すると思いますFullName = c.FirstName + " " + c.LastName。Customer から CustomerViewModel へのマッピングは次のようになります。

Mapper.CreateMap<Customer, CustomerViewModel>()
       .ForMember(custVm => custVm.FullName,
            mapper => mapper.MapFrom(cust => cust.FirstName + " " + cust.LastName));

FullNameただし、ビューモデルからプロップを EF クラスのFirstName&LastNameフィールドに戻す方法を理解する必要があります。ただし、それを実装する方法を決定するときは、他のマッピングについて上記のパターンに従います。

クエリを大幅に小さくすることができます。

using (var context = new GCSBaseEntities()) 
{
     return from c in context.Customers
            select Mapper.Map<CustomerViewModel>(c);
}
于 2013-11-26T18:38:46.220 に答える
2

理解した。前述のエラーを回避するには、顧客の後に .AsEnumerable() の呼び出しを次のように追加する必要があります。

     return from c in context.Customers.AsEnumerable()
        select Mapper.Map<CustomerViewModel>(c);

このスレッドからこれを取得しました:LINQ and AutoMapper

于 2013-11-27T21:43:08.460 に答える