Entités:Automapper crée soudainement objet imbriqué
public class Entity
{
public int Id { get; set; }
}
public class User : Entity
{
public string Name { get; set; }
public Company Company { get; set; }
}
public class Company : Entity
{
public string Name { get; set; }
}
DTO:
public class EntityDto
{
public int Id { get; set; }
}
public class UserDto : EntityDto
{
public string Name { get; set; }
public int? CompanyId { get; set; }
}
donc je veux la carte User
à UserDto
comme User.Company == null
=>
UserDto.CompanyId == null
et vice versa.
C'est mon Automapper configuration:
Mapper.Initialize(configuration =>
{
configuration
.CreateMap<User, UserDto>()
.ReverseMap();
});
Cela fonctionne très bien:
[Fact]
public void UnattachedUserMapTest()
{
// Arrange
var user = new User { Company = null };
// Act
var userDto = Mapper.Map<User, UserDto>(user);
// Assert
userDto.CompanyId.Should().BeNull();
}
mais ce test échoue:
[Fact]
public void UnattachedUserDtoMapTest()
{
// Arrange
var userDto = new UserDto { CompanyId = null };
// Act
var user = Mapper.Map<UserDto, User>(userDto);
// Assert
user.Company.Should().BeNull();
}
Détails:
Expected object to be <null>, but found
Company
{
Id = 0
Name = <null>
}
ne fonctionne pas pour moi:
...
.ReverseMap()
.ForMember(user => user.Company, opt => opt.Condition(dto => dto.CompanyId != null));
et bien que celle (juste par exemple):
...
.ReverseMap()
.ForMember(user => user.Company, opt => opt.Ignore());
Pourquoi créer Automapper objet imbriqué et comment puis-je l'empêcher?
Je suppose que je ne suis pas en mesure d'utiliser la cartographie conditionnelle pour les membres? Ignorer est toujours ok pour moi, mais je veux juste savoir) –
Vous voulez dire [ceci] (https://github.com/AutoMapper/AutoMapper/issues/2298)? –
Oui, exactement. Sympa de le voir sera bientôt disponible. –