entity-framework - 我可以一次性忽略 Automapper 属性吗?

标签 entity-framework automapper

我正在使用 Automapper 将 EF 对象映射到 DTO;许多对象都是多对多排列的。例如:

committee (table) 1 =< m  committeemember (table)  m >= 1 person (table)

这可能映射到:

public class CommitteeViewModel
{
    public int idCommittee { get; set; }
    public IEnumerable<CommitteeMemberViewModel> CommitteeMembers { get; set; }
}

public class CommitteeMemberViewModel
{
    public int idCommittee { get; set; }
    public int idCommitteeMember { get; set; }
    public PersonViewModel Members { get; set; }
}

还有 <committee, CommitteeViewModel> 的 Automapper map , <committeemember, CommitteeMemberViewModel> , 和 <person, PersonViewModel> .

当我想返回一个委员会及其成员时,一切都很好。

但是,当我想要一个没有成员的委员会列表时,有没有办法让 Automapper 忽略某些属性,只是为了那个调用?有点像:

var committeeList = Automapper.Mapper.Map
    <List<committee>, List<CommitteeViewModel>>(committees)
   .Ignore("CommitteeMembers");

当然,我可以创建新的 DTO 来省略这些属性并映射到那些属性,但是由于我基本上想要所有的东西, 一个属性,我认为可能有更好的方法,比如创建一个不同的 map ——但我找不到它。

谢谢,

最佳答案

您可以通过这种方式获得预期的结果:创建新映射(即覆盖现有映射)、映射您的源实体并覆盖映射回来:

Mapper.CreateMap<committee, CommitteeViewModel>()
      .ForMember(c => c.CommitteeMembers, o => o.Ignore());

var committeeList = Mapper
      .Map<List<committee>, List<CommitteeViewModel>>(committees);

Mapper.CreateMap<committee, CommitteeViewModel>();

但我认为最好保持一致。如果我从委员会映射到 CommitteeViewModel,我希望它每次都会产生相同的结果。因此,最好为“轻型”映射创建新的 View 模型。

关于entity-framework - 我可以一次性忽略 Automapper 属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13459891/

相关文章:

c# - 无法创建级联外键

entity-framework - Include/ThenInclude 与 EF Core 中的 where

c# - 如何在 MySQL Entity Framework 中执行过程

c# - Automapper 通过继承映射基类

entity-framework - 返回空的 IQueryable<>

entity-framework - Entity Framework 中的复杂类型

automapper - 如果目标不为空,自动映射器可以忽略目标/仅更改空字段

c# - 将依赖注入(inject)与具有构造函数参数的 AutoMapper ValueResolver 结合使用

c# - 为 ASP .NET MVC 创建单元测试时出现的问题

c# - Automapper 找到未映射的成员