2011-09-28 103 views
10

大家好/很新的Auto-Mapper。我可以映射一對一的對象,但想知道是否可以將多個對象映射到一個對象或將多個對象映射到多個對象?如何使用AutoMapper將多個OBJECTS映射到一個對象 - asp.net mvc 3

認爲我有以下情形......

用戶模型

public class User 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public Company Company { get; set; } // 1 user work in 1 company 
    } 

公司型號

public class Company 
     { 
      public string CompanyName { get; set; } 
      public string Website { get; set; } 
      public ICollection<User> Users { get; set; } // 1 Company can have many users 
     } 

UserCompanyViewModel

我要顯示的用戶名列表他們公司在一個視圖中的細節..

public class UserCompanyViewModel 
      { 
       public ICollection<User> Users { get; set; } 
       ppublic ICollection<Company> Companies { get; set; } 
      } 

現在,是否有可能在這種情況下映射,如果是的話,我可以在一個視圖中顯示,當編輯該視圖時,我想再次映射更新的字段到它們各自的模型。

任何幫助,將不勝感激...... THX

回答

13

在這種情況下,你真的使用多個(種)對象作爲源?從您定義的問題看來,您的來源是用戶列表 - 根據「我希望顯示用戶列表及其公司詳細信息」來判斷。

如果是這樣的話,而你不能做到這一點暗示你可以使用一個TypeConverter執行地圖很輕鬆地:

Mapper.CreateMap<ICollection<User>, UserCompanyViewModel>() 
     .ConvertUsing<UserCompanyViewModelConverter>(); 

然後定義您的轉換器:

public class UserCompanyViewModelConverter : ITypeConverter<ICollection<User>, UserCompanyViewModel> 
{ 
    public UserCompanyViewModel Convert(ResolutionContext context) 
    { 
     UserCompanyViewModel model = new UserCompanyViewModel(); 

     ICollection<User> sourceUsers = (ICollection<User>)context.SourceValue; 

     model.Users  = sourceUsers; 
     model.Companies = sourceUsers.Select(u => u.Company).Distinct().ToList(); 

     return model; 
    } 
} 

然後當你想映射你只需拿你的用戶集合someUsers並映射它:

UserCompanyViewModel model = Mapper.Map<ICollection<User>, UserCompanyViewModel>(someUsers); 

如果您確實需要將多個源類型映射到單個目標類型,它看起來像this blog post包含一個簡短的幫助程序類,它可以幫助您。簡而言之,AutoMapper並不完全支持這一點,所以你將會發出一些Map請求來填充你的ViewModel。您將需要使用另一個TypeConverter以確保第二個電話不會替換第一個電話添加的公司。

+0

正如我所說,在一個視圖中,我想顯示一個用戶與公司的詳細信息的集合。所以會有2個集合用戶,公司,所以我有UserCompanyViewModel來顯示。 –

+0

然而,ViewModel是目的地。您的源代碼收集,您從商店中檢索然後放入ViewModel中的數據,對不對? – Kasaku

+0

是的..在這種情況下,我的來源是用戶和公司合併的集合。想要把所有在目標UserCompanyVM,然後顯示foreach用戶與公司的詳細信息.. –

相關問題