【问题标题】:how do i use AutoMapper in ICollation<> Fields我如何在 ICollat​​ion<> 字段中使用 AutoMapper
【发布时间】:2015-12-12 15:00:20
【问题描述】:

当我使用 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; }
}

//视图模型

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;
}

【问题讨论】:

  • 你能显示你创建地图的代码和你映射的代码吗?

标签: automapper icollection


【解决方案1】:

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

添加以下地图:

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

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

【讨论】:

  • 谢谢你,关于你的建议……我在项目中使用了洋葱架构,我在服务层安装了 AutoMapper,我不知道如何在这一层实现“应用程序启动”。如果你指导我,我谢谢你:)
  • 我不会在每个方法调用时都创建映射。至少将它们放在将使用它们的类的构造函数中。您还可以使用依赖注入并将IMappingEngine 注入此类,并让另一个类负责创建映射。你可以在网上找到很多关于 AutoMapper 和依赖注入的资料。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 2014-10-06
  • 1970-01-01
  • 2014-10-28
  • 2018-10-23
  • 2016-04-27
  • 1970-01-01
相关资源
最近更新 更多