2017-02-21 81 views
0

我是Automapper的新手。通過下面的鏈接,我試圖在行動中理解它。如何使用Automapper最新版本?

我使用它Automapper v 5.2.0

這是我的東西。 https://codepaste.net/xph2oa

class Program 
{ 
    static void Main(string[] args) 
    { 
     //PLEASE IGNORE NAMING CONVENTIONS FOR NOW.Sorry!! 
     //on Startup 
     AppMapper mapperObj = new AppMapper(); 
     mapperObj.Mapping(); 

     DAL obj = new DAL(); 
     var customer = obj.AddCustomers(); 


    } 
} 

class Customer 
{ 
    public int CustomerId { get; set; } 

    public string CustName { get; set; } 
} 


class CustomerTO 
{ 
    public int CustId { get; set; } 

    public object CustData { get; set; } 
} 


class AppMapper 
{ 
    public void Mapping() 
    { 
     var config = new MapperConfiguration(cfg => 
        { 
         cfg.CreateMap<Customer, CustomerTO>(); 
        }); 

     IMapper mapper = config.CreateMapper(); 

    } 
} 

class DAL 
{ 
    public IEnumerable<CustomerTO> AddCustomers() 
    { 
     List<Customer> customers = new List<Customer>(); 
     customers.Add(new Customer() { CustName = "Ram", CustomerId = 1 }); 
     customers.Add(new Customer() { CustName = "Shyam", CustomerId = 2 }); 
     customers.Add(new Customer() { CustName = "Mohan", CustomerId = 3 }); 
     customers.Add(new Customer() { CustName = "Steve", CustomerId = 4 }); 
     customers.Add(new Customer() { CustName = "John", CustomerId = 5 }); 

     return customers; //throws error 

    } 
} 

錯誤-Cannot隱式轉換類型System.Collections.Generic.List」到 'System.Collections.Generic.IEnumerable'。存在明確的轉換(您是否缺少演員?)

如何將List<Customer>映射到List<CustomerTO>

請注意,在Customerstring類型的屬性與名稱CustnameCustomerTO我有object類型的名稱CustData財產。 那麼我該如何映射這個不同的名稱屬性?

感謝。

+0

檢查[this](http://stackoverflow.com/questions/37348788/automapper-5-0-global-configuration)我認爲它會幫助你。但我不知道你是否可以從'string'映射到'object' –

+0

你看過維基?它具有最新的文檔,而不是我的博客,它可能會過時(例如,靜態API仍然存在,並且會存在)。 –

+0

@JimmyBogard,感謝您的博客。你的博客+其他一些鏈接足以讓我開始。我沒有檢查到維基。 –

回答

1

在要映射的類型中爲屬性使用相同的名稱是我們AutoMapper的最簡單的方法。這樣你現在的配置就可以工作。

然而,在你不這樣做,你需要具體說明如何將屬性映射,如下

cfg.CreateMap<Customer, CustomerTO>() 
.ForMember(dto => dto.CustData, opt => opt.MapFrom(entity => entity.CustName)) 
.ForMember(dto => dto.CustId, opt => opt.MapFrom(entity, entity.CustomerId)); 

我假設你想直接映射到CustNameCustData情況上面,這將工作正常。

+0

假設我在Customer&CustomerTO中有10多個房產。 9個屬性具有相同的名稱,但1個屬性名稱和類型不同。在這種情況下,我需要寫.ForMember <> 10次 –

+0

不,您只需要爲名稱不同的成員指定。 –

+0

您可以在DAL方法中檢查更新後的帖子,發現構建錯誤 –