8

プロパティをオブジェクトから別のプロパティ名を持つ別のオブジェクトにマップするにはどうすればよいですか?

私はProduct次のようなクラスを持っています:

public class Product : IEntity
{
     public int Id { get; set; }
     public string Name { get; set; }
}

そして、ビューモデルは次のようになります。

public class ProductSpecificationAddViewModel
{
     public int ProductId { get; set; }
     public string ProductName { get; set; }
}

次のマッピングを行う必要があります。

Product.Id => ProductSpecificationAddViewModel.ProductId
Product.Name =>ProductSpecificationAddViewModel.ProductName

これが私の行動方法です:

public ActionResult Add(int id)
{
     Product product = productService.GetById(id);

     // Mapping
     //ProductSpecificationAddViewModel viewModel = new ProductSpecificationAddViewModel();
     //viewModel.InjectFrom(product);

     return View(viewModel);
}

どうすればいいですか?

4

2 に答える 2

8

ValueInjecter を使用している場合は、ConventionInjection を記述します。2つ目のサンプルはこちら

    public class PropToTypeProp : ConventionInjection
    {
        protected override bool Match(ConventionInfo c)
        {
            return c.TargetProp.Name == c.Source.Type.Name + c.TargetProp.Name;
        }
    }

このインジェクションは、TSource.* のすべてのプロパティから TTarget.TSource+* まで行うため、次のようにします。

vm.InjectFrom<PropToTypeProp>(product);
于 2011-11-07T12:29:15.467 に答える
3

これはAutoMapperで簡単に行うことができます。デフォルトでは、規則が使用されます (つまり、ID は ID に、名前は名前にマップされます) が、カスタム マッピングを定義することもできます。

Mapper.CreateMap<Product, ProductSpecificationAddViewModel>()
    .ForMember(destination => destination.ProductName,
               options => options.MapFrom(
                    source => source.Name));

コントローラーのマッピング コードは次のように単純になります。

Mapper.Map(product, viewModel);
于 2011-11-07T12:23:50.857 に答える