[AutoMapper] Manual map след AutoMapper-a


0

Здравейте,
имам следния въпрос. Възможно ли е след като мине automapper-a и map-не всичко от database model към view model, аз ръчно да обходя този модел и да си добавя каквото ми трябва?

Нещо такова:

var recipes = this.recipes.All().ProjectTo<IndexRecipeViewModel>(); foreach (var recipe in recipes) { recipe.Tags = GetRecipeTags(recipe.RecipeId); } private List<string> GetRecipeTags(int recipeId) { var currentRecipeTagIds = this.recipesTags.All().Where(r => r.RecipeID == recipeId).Select(t => t.TagID).ToList(); var allTags = this.tags.All().ToList(); var currentRecipeTagNames = allTags.Where(x => currentRecipeTagIds.Contains(x.TagId)).Select(x => x.Name).ToList(); return currentRecipeTagNames; }


Данните се инжектват директно в конструктора чрез Ninject. В момента както го правя по-горе, след обхождането конкретния List с тагове е null. Същото е и когато искам да напълня някоя integer променлива например. Остава си default-ната стойност 0.
От поведението на AutoMapper-а ли е или бъркам някъде другаде. Също така има ли възможност директно в модела да си извадя тези тагове, като все пак инжектна някак си данните за да ги използвам в пропъртито?




Отговори



1

Може в самия IndexRecipeViewModel да си направиш едно пропътри от сорта на 

public IEnumerbale<TagViewModel> Tags {get; set;} 

(плюс самия viewmodel ще трябва да напишеш :)

и Automapper-a е достъчно хитър директно да направи връзката

и няма да се налага да правиш такива гимнастики

 

от c.l.angelov (510 точки)


1
Благодаря за отговора. Накара ме да се замисля, че не си ползвам правилно връзките в Entity framework между таблиците и го направих много елегантно. А именно имплементирах IHaveCustomMappings в модела и добавих следното:

public List<string> Tags { get; set; } public void CreateMappings(AutoMapper.IConfiguration configuration) { configuration.CreateMap<Recipe, IndexRecipeViewModel>() .ForMember(m => m.Tags, opt => opt.MapFrom(u => u.Tags.Select(x => x.TagId.Name))); }

Поздрави!