Использование Automapper через таблицу соединений в EFCore - PullRequest
0 голосов
/ 12 марта 2019

У меня есть отношение «многие ко многим» между Recipe и Item через таблицу соединений с именем Ingredient:

 public class Recipe
 {
     public int RecipeId { get; set; }
     public string Name { get; set; }

     public ICollection<RecipeInstruction> RecipeInstructions { get; set; }
     public ICollection<Ingredient> Ingredients { get; set; }
 }

public class Ingredient
{
    public Recipe Recipe { get; set; }
    public int RecipeId { get; set; }

    public Item Item { get; set; }
    public int ItemId { get; set; }

    public int Quantity { get; set; }

}

 public class Item
 {
     public int ItemId { get; set; }
     public string Name { get; set; }
     public string Brand { get; set; }   

     public ICollection<Ingredient> Ingredients { get; set; }
  }

Я хотел бы представить данные через это DTO:

 public class RecipeForDetailedDto
 {   
    public int RecipeId { get; set; }
    public string Name { get; set; }      

    public ICollection<RecipeInstruction> RecipeInstructions { get; set; }
    public ICollection<ItemForDetailedDto> Ingredients { get; set; }
 }

Есть ли способ, которым я могу сопоставить это отношение, чтобы показать список имен ингредиентов, который будет именем элемента?

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

В конце концов это то, что сработало:

    CreateMap<Ingredient, IngredientForDetailedDto>()
       .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Item.Name))

С IngredientForDetailedDto как:

 public class IngredientForDetailedDto
    {
        public string Name { get; set; }
        public int Quantity { get; set; }
        public string QuantityType { get; set; }

    }
0 голосов
/ 12 марта 2019

Это должно выглядеть так:

CreateMap<Ingredient, ItemForDetailedDto>();
CreateMap<Ingredient,RecipeForDetailedDto>()
    .ForMember(dest=>dest.Name, opt=>opt.MapFrom(src=>src.Item?.Name));

var result = mapper.Map<ItemDetailedDto>(yourIngredientObject);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...