C# 防止Automapper使用空值创建对象属性

C# 防止Automapper使用空值创建对象属性,c#,automapper,C#,Automapper,我正在使用带有EF核心的Automapper。EF实体: public class Team { public Guid? Id { get; set; } public string Name { get; set; } public Guid? OrganizationId { get; set; } public Organization Organization { get; set; } } public class Organization {

我正在使用带有EF核心的Automapper。EF实体:

public class Team
{
    public Guid? Id { get; set; }

    public string Name { get; set; }

    public Guid? OrganizationId { get; set; }

    public Organization Organization { get; set; }
}

public class Organization
{
    public Guid Id { get; set; }

    public string Name { get; set; }

    public ICollection<Team> Teams { get; set; }
}
类型映射:

cfg.CreateMap<Organization, OrganizationDto>();

cfg.CreateMap<TeamDto, Team>()
    .ForMember(teamEntity => teamEntity.Organization, opt => opt.Ignore())
    .ForMember(teamEntity => teamEntity.OrganizationId, opt => opt.MapFrom(
        orgDto => orgDto == null ? null : orgDto.Id))
    .ReverseMap();
这是不可取的,因为我希望TeamDto的Organization属性为null。 我试图通过FormMember配置此映射,但未生效:

cfg.CreateMap<TeamDto, Team>()
    .ForMember(teamEntity => teamEntity.Organization, opt => opt.Ignore())
    .ForMember(teamEntity => teamEntity.OrganizationId, opt => opt.MapFrom(
        orgDto => orgDto == null ? null : orgDto.Id))
    .ReverseMap()
    .ForMember(teamDto => teamDto.Organization, opt => opt.MapFrom(
        teamEntity => teamEntity.Organization == null ? null : new OrganizationDto
    {
        Id = teamEntity.Organization.Id,
        Name = teamEntity.Organization.Name
    }));
当源也为null时,如何将其配置为将Organization属性设置为null

实现这一点的一种方法是使用AfterMap,但我正在寻找一种可以应用于所有此类情况的解决方案,而无需为每个情况指定AfterMap


汽车制造商v。9.0.0

有时ReverseMap会碍事,就像这里的情况一样。您总是可以避免它,只需显式地创建反向映射。

有时反向映射会碍事,就像这里的情况一样。您总是可以避免它,只需显式地创建反向映射。

不要使用反向映射,只需显式地创建两个映射。@LucianBargaoanu成功了,谢谢!请发布它,我会确保将其标记为答案。不要使用反向映射,只需显式创建两个映射即可。@LucianBargaoanu成功了,谢谢!请把它贴出来,我一定要把它标记为答案。
var team = new Team
{
    Name = "New Team"
};

// team.Organization is null as well as team.OrganizationId
var teamDto = s_mapper.Map<TeamDto>(team);   
cfg.CreateMap<TeamDto, Team>()
    .ForMember(teamEntity => teamEntity.Organization, opt => opt.Ignore())
    .ForMember(teamEntity => teamEntity.OrganizationId, opt => opt.MapFrom(
        orgDto => orgDto == null ? null : orgDto.Id))
    .ReverseMap()
    .ForMember(teamDto => teamDto.Organization, opt => opt.MapFrom(
        teamEntity => teamEntity.Organization == null ? null : new OrganizationDto
    {
        Id = teamEntity.Organization.Id,
        Name = teamEntity.Organization.Name
    }));