我如何在ICollat​​ion中使用AutoMapper<>字段

时间:2015-12-12 15:00:20

标签: automapper icollection

当我使用AutoMapper映射我的ViewModel并获取所有新闻时,为我抛出了错误。

...错误 无法映射Mosque.Core.ViewModels.CategoryViewModel上的以下属性: 分类 添加自定义映射表达式,忽略,添加自定义解析程序或修改目标类型Mosque.Core.ViewModels.CategoryViewModel。

请帮助我,谢谢

//模型

public class News
{
    public int Id { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
    public virtual User User { get; set; }
}

public class Category
{
    public int Id { get; set; }
    public string Title { get; set; }
    public virtual ICollection<News> News { get; set; }
}

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<News> News { get; set; }
}

//的ViewModels

public class NewsViewModel
{
    public int Id { get; set; }
    public string Title { get; set; }
    public virtual ICollection<CategoryViewModel> Categories { get; set; }
    public virtual UserViewModel User { get; set; }
}

public class CategoryViewModel
{
    public int Id { get; set; }
    public string Title { get; set; }
    public virtual ICollection<NewsViewModel> News { get; set; }
}

public class UserViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<NewsViewModel> News { get; set; }
}

我如何用于选择所有新闻?

- UPDATE1 -

我在项目中使用了洋葱架构,我在服务层安装了AutoMapper,我希望从存储库中获取所有新闻并填入ViewModels并传递给UI。 我的服务层代码是......

public List<NewsViewModel> GetAll()
{
    Mapper.CreateMap<News, NewsViewModel>()
        .ForMember(dest => dest.Categories, src => src.MapFrom(p => p.Categories))
        .ForMember(dest => dest.User, src => src.MapFrom(p => p.User));
    Mapper.AssertConfigurationIsValid();
    var viewModels = new List<NewsViewModel>();
    foreach (var item in _newsRepository.GetAll())
    {
        var viewModel = Mapper.Map<News, NewsViewModel>(item);
        viewModels.Add(viewModel);
    }
    return viewModels;
}

1 个答案:

答案 0 :(得分:0)

您似乎没有为CatagoryUser创建地图。

添加以下地图:

Mapper.CreateMap<User, UserViewModel>();
Mapper.CreateMap<Category, CategoryViewModel>();

顺便问一下,为什么要在GetAll方法中创建地图?您可以创建一次地图,通常是在应用程序启动时。