2016-05-25 6 views
1

私が持っている2クラス:のC# - マッパーと構成ファイル

public class Customer 
{ 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public Product Product { get; set; } 
} 

public class Product 
{ 
    public int ProductNumber { get; set; } 

    public string ProductColor { get; set; } 
} 


public class Customer_ 
{ 
    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public Article Article { get; set; } 
} 

public class Article 
{ 
    public int ArticleNumber { get; set; } 

    public string ArticleColor { get; set; } 
} 

そして、もう一つのインスタンス:私は私のインスタンスCus

IからクラスCustomer_の1つのインスタンスを作成したい

Customer Cus = new Customer() 
{ 
    FirstName = "FirstName1", 
    LastName = "LastName1", 
    Product = new Product() 
    { 
     ProductColor = "ProductColor1", 
     ProductNumber = 11 
    } 
}; 

オートマッパーを使用:

MapperConfiguration Config = new MapperConfiguration(cfg => 
{ 
    cfg.CreateMap<Customer, Customer_>() 
    .ForMember(a => a.Article, b => b.MapFrom(c => c.Product)); 

    cfg.CreateMap<Product, Article>() 
    .ForMember(a => a.ArticleColor, b => b.MapFrom(c => c.ProductColor)) 
    .ForMember(a => a.ArticleNumber, b => b.MapFrom(c => c.ProductNumber));     
}); 

IMapper Mapper = Config.CreateMapper(); 
var cus_ = Mapper.Map<Customer, Customer_>(Cus); 

それは仕事ですが、構成ファイルからMapperConfigurationを作成する必要があります。このように:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <Automapper> 
    <Column source="Product" destination="Article"/> 
    <Column source="Product.ProductColor" destination="Article.ArticleColor"/> 
    ... 
    ... 
    ... 
    </Automapper> 
</configuration> 

可能ですか?

+0

あなたのXMLがこれを行うのに十分な、非常に完全な見ていない、あなたのような何かを持っている必要があるでしょう。 –

+0

このリンクが役立つかどうか教えてください http://stackoverflow.com/questions/19179459/how-to-define-automapper-mapping-outside-code-i-e-in-a-xml-file-or-use-differen – Varun

答えて

2

はAutoMapperと箱の外にこれを行う方法はありませんが、AutoMapperのタイプをベースバージョンでは、あなたは確かにこれを行うことができます。

cfg.CreateMap(typeof(Customer), typeof(Customer_)) 
    .ForMember("Product").MapFrom("Article"); 

は、だから、をループするために必要なだけだろうあなたXMLを使用して型をロードし、各サブノードに対して、あなたが持っている2つの文字列についてMapFromを呼び出します。何が可能であるちょうど約

<TypeMap SourceType="Customer" DestinationType="Customer_"> 
    <PropertyMap Member="Product" MapFrom="Article"> 
</TypeMap> 

など

関連する問題