Существуют ли какие-либо пользовательские функции AutoMapper для решения проблемы картографии? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь сопоставить некоторые сущности с DTO, а некоторые DTO с сущностями с помощью AutoMapper 8.0.0.

Это мое определение AutoMapper для сопоставления сущности с DTO. Я смог сопоставить сущности с DTO по определению ниже.

Но когда я пытался сопоставить DTO с сущностями, поменяв Recipe и RecipeDTO, я не смог отобразить. Я получил ошибку.

Как определить инициализацию autopper, чтобы можно было это реализовать?

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<Recipe, RecipeDTO>()
    .ForMember(dest => dest.Directions, opt => opt.MapFrom(src =>     
    src.Directions))
    .ForMember(dest => dest.Ingredients, opt => opt.MapFrom(src => 
    src.Ingredients))
    .ForMember(dest => dest.Categories, opt => opt.MapFrom(src => 
    src.Categories.Select(i => i.Name)));
});

Это мои сущности и DTO'S

public class Recipe
{
    public override int Id { get; set; }

    public string Title { get; set; }

    public int DirectionId { get; set; }

    public virtual Direction Directions { get; set; }

    public override DateTime CreatedDate { get; set; }

    public override string CreatedBy { get; set; }

    public override DateTime? ModifiedDate { get; set; }

    public override string ModifiedBy { get; set; }

    public override bool IsDeleted { get; set; }

    public virtual ICollection<Category> Categories{get;set;}

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


public class Direction
{
    public override int Id { get; set; }

    public string Step { get; set; } 

    public int RecipeId { get; set; }
    public virtual Recipe Recipe { get; set; }

    public override DateTime CreatedDate { get; set; }

    public override string CreatedBy { get; set; }

    public override DateTime? ModifiedDate { get; set; }

    public override string ModifiedBy { get; set; }

    public override bool IsDeleted { get; set; }
}

public class Category
{
    public override int Id { get; set; }

    public string Name { get; set; } 

    public override DateTime CreatedDate { get; set; }

    public override string CreatedBy { get; set; }

    public override DateTime? ModifiedDate { get; set; }

    public override string ModifiedBy { get; set; }

    public override bool IsDeleted { get; set; }

    public virtual ICollection<Recipe> Recipes { get; set;}
}


public class Ingredient
{
    public override int Id { get; set; }

    public string Name { get; set; } 

    public override DateTime CreatedDate { get; set; }

    public override string CreatedBy { get; set; }

    public override DateTime? ModifiedDate { get; set; }

    public override string ModifiedBy { get; set; }

    public override bool IsDeleted { get; set; }

    public int AmountId { get; set; }
    public virtual Amount Amount { get; set; }

    public int RecipeId { get; set; }

    public virtual Recipe Recipe { get; set; }
}

public class Amount
{
    public override int Id { get; set; }

    public string Quantity { get; set; }

    public string Unit { get; set; }

    public override DateTime CreatedDate { get; set; }

    public override string CreatedBy { get; set; }

    public override DateTime? ModifiedDate { get; set; }

    public override string ModifiedBy { get; set; }

    public override bool IsDeleted { get; set; }

    public int IngredientId { get; set; }
    public virtual Ingredient Ingredient { get; set; }
}

public class RecipeDTO
{   
    public string Title { get; set; }

    public List<string> Categories { get; set; }

    public List<IngredientDTO> Ingredients { get; set; }

    public DirectionDTO Directions { get; set; }
} 

public class DirectionDTO
{
    public string Step { get; set; }
}

public class IngredientDTO
{ 
    public string Name { get; set; } 

    public AmountDTO Amount { get; set; }
}

public class AmountDTO
{
    public string Quantity { get; set; }

    public string Unit { get; set; }
}
...