Je ne sais pas si le titre a du sens, mais voici ce que je fais. J'utilise AutoMapper pour mapper mes Entity Framework Entities à mes objets DTO et vice versa. Le problème survient lorsque j'essaie de mapper les données DTO à l'entité EF. Il n'y a pas de propriété pour mappage de propriété pour EntityKey. Pour résoudre ce problème, je fais un peu comme ce qui suit:Existe-t-il un moyen générique d'utiliser ValueResolver d'AutoMapper pour mapper des valeurs EntityKey pour les entités EF?
Mapper.CreateMap<VideoDTO, Video>()
.ForMember(dest => dest.EntityKey, opt =>
opt.ResolveUsing<VideoEntityKeyResolver>());
La classe VideoEntityKeyResolver ressemble:
public class VideoEntityKeyResolver : ValueResolver<VideoDTO, EntityKey>
{
protected override EntityKey ResolveCore(VideoDTO source)
{
EntityKey key = new EntityKey("EntityFrameworkTestingEntities.Videos",
"VideoId", source.VideoId);
return key;
}
}
Je me demandais s'il y avait une façon plus générique de le faire où je pourrais avoir une classe avec un constructeur qui prend le nom de l'ensemble d'entités, le nom de la propriété clé et la valeur clé dans un constructeur. J'ai pensé à ajouter juste une propriété EntityKey à mes objets DTO qui ressemble beaucoup à traverser les flux car le point de créer les objets DTO était de graver le lien avec ma couche de données dans le reste de mon application .
Sur une note totalement indépendante (je peux créer une nouvelle question si nécessaire), où dois-je définir mes mappages lors de l'utilisation d'AutoMapper? Actuellement, je le fais dans le constructeur de mon objet contexte (qui est mon objet référentiel EF), mais je crois que c'est plutôt coûteux et tout simplement pas correct, cependant, cela fonctionne.
Merci pour la réponse détaillée. La plupart de cela est sur ma tête, mais c'est plus moi que vous. Je suis toujours en train de lutter avec l'utilisation de lambda et autres. Quoi qu'il en soit, savez-vous s'il existe une méthode automapper qui vous permet d'assigner explicitement une valeur calculée à une propriété? Si c'est le cas, je pourrais simplement créer un objet EntityKey avec les paramètres nécessaires et mapper cette valeur à la propriété EntityKey sur mon entité. J'avais examiné la méthode MapFrom AutoMapper, mais je n'ai pas eu le temps d'y plonger. – jason
J'allais suggérer cela comme une méthode plus simple, mais j'ai décidé de répondre directement à votre question. Je vais ajouter cela à la réponse. (Aussi, n'oubliez pas de voter et/ou d'accepter la réponse si vous le trouvez pour répondre à vos besoins) – mkedobbs
Merci d'aller au-dessus et au-delà sur cette question. Cela m'a vraiment aidé! Je suis allé de l'avant et je me suis contenté de mapper une propriété EntityKey, ce qui semble avoir fonctionné. – jason