J'ai mis à jour à partir de AutoMapper 2.0.0 à 2.2.0 aujourd'hui, et a réalisé la mise à jour a cassé une partie du code. Je voulais demander ici avant de poster une question sur le automapper la page github.
Une de mes destination des types initialise une collection de propriété comme suit:
public class PageOf<TModel>
{
public PageOf()
{
Items = Enumerable.Empty<TModel>();
}
public IEnumerable<TModel> Items { get; set; }
}
Avec automapper 2.0.0, c'était bien. Quand j'ai mis à jour 2.2.0, la cartographie de ce type de destination causé un NotSupportedException avec le message "la Collecte a été de taille fixe." (Cette exception a été enveloppé à l'intérieur d'un AutoMapperMappingException.)
J'ai été en mesure de résoudre le problème en changeant le constructeur code ci-dessus à ceci:
public PageOf()
{
Items = new List<TModel>();
}
Il me semble que si AutoMapper 2.0.0 est de jeter quelle que soit la valeur de a dans les Éléments de propriété et l'utilisation de l' set
de la Propriété de l'accesseur, alors que AutoMapper 2.2.0 est juste à l'aide de l' get
de la propriété de l'accesseur et en essayant de modifier l'existant IEnumerable. Il ressemble Enumerable.Empty<TModel>()
est juste à la substitution d'un zéro-longueur de la matrice, ce qui expliquerait l'exception.
Est-ce un bug? Ce qui, dans AutoMapper changé entre la version 2.0.0 et 2.2.0 qui serait la cause d'ignorer la destination des biens setter et au lieu d'essayer de modifier la collection existante?
Mise à jour:
Comme demandé, voici le CreateMap composez le:
public class PagedQueryResultToPageOfItemsProfiler : Profile
{
protected override void Configure()
{
CreateMap<PagedQueryResult<EstablishmentView>, PageOfEstablishmentApiModel>();
}
}
L' PageOfEstablishmentApiModel
classe hérite de PageOf<EstablishmentApiModel>
.
Ici est le Mappeur.Carte de code:
var query = Mapper.Map<EstablishmentViewsByKeyword>(input);
var results = _queryProcessor.Execute(query);
var model = Mapper.Map<PageOfEstablishmentApiModel>(results); // exception here
Si un mappage spécial de configuration est nécessaire (par exemple .ConvertUsing(x => x)) dans AutoMapper va partir de la version 2.0.0 de 2.2.0, nous avons de nous accrocher à l'ancienne version. J'ai toujours aimé la façon dont SUIS converti automatiquement les propriétés de collection, et sans que, SUIS semble plus comme ValueInjecter.