0

我在MVC 5中使用AutoMapper 4.1.1,然後使用它將實體從EF6(純Poco與任何虛擬和沒有延遲加載)映射到viewModels。我遇到了一個奇怪的問題,AutoMapper正確地翻譯了它,但在另一個實例中失敗了。AutoMapper奇怪的錯誤

Dto.Person 
{ 
    public int PersonId { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string Phone { get; set; } 
} 

ViewModel.PersonDetailViewModel 
{ 
    public int PersonId { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string Phone { get; set; } 
} 

public class PagedPersons 
{ 
    public int TotalNumberOfRecords { get; set; } 
    public IEnumerable<Person> ListOfPersons { get; set; } 
} 

功能來獲取人員

public IEnumerable<Person> GetAllPersons_NOPaging() 
{ 
    IEnumerable<Person> persons = new List<Person>(); 
    persons = GetFromdatabase(); 
    return persons; 
} 

public PagedPersons GetAllPersons_WithPaging() 
{ 
    int totalNumberOfRecords = 0; 
    IEnumerable<Person> = GetFromDatabase(); 
    return new PagedPersons { TotalNumberOfRecords = totalNumberOfRecords, ListOfPersons = listofPersons }; 
} 

控制器

var pagedPerson = GetAllPersons_WithPaging(); 
var persons = GetAllPersons_NOPaging(); 

AutoMapper.Mapper.CreateMap<Person, PersonDetailViewModel>(); 

// THROWS AN ERROR 
var viewModel_1 = AutoMapper.Mapper.Map<IEnumerable<Person>, IEnumerable<PersonDetailViewModel>>(pagedPersons.ListOfPersons); 

// does NOT throw error 
var viewModel_2 = AutoMapper.Mapper.Map<IEnumerable<Person>, IEnumerable<PersonDetailViewModel>>(persons); 

所以,我不明白我做錯了什麼作爲AutoMapper能夠在viewmodel_2的情況下正確映射但在viewModel_1上拋出以下錯誤。

缺少類型映射配置或不支持的映射。

映射類型: 人員 - > PersonDetailViewModel MyProject.Dto.Person - > MyProject.Website.ViewModels.PersonDetailViewModel

目標路徑: IEnumerable`1 [0]

Source值: MyProject的.Dto.Person

+1

pagedPersons.ListOfPersons.ToList()? –

+0

我試過,甚至嘗試過使用pagedPerson.ListOfPersons.ToList (),但仍然是相同的錯誤。 – Johny

+0

謝謝羅斯,你的建議確實幫了忙。你能否發表一個答案,然後我會接受它。 – Johny

回答

1

你需要返回一個列表<> - pagedPersons.ListOfPersons.ToList()

-1

試試

var viewModel_1 = AutoMapper.Mapper.Map<IEnumerable<Person>, IEnumerable<PersonDetailViewModel>>(pagedPersons.ListOfPersons.ToList());