Как установить сложный объект с помощью Entity Framework Core? - PullRequest
0 голосов
/ 09 мая 2018

У меня есть структура классов, как показано ниже. У меня есть основная категория, и она может иметь несколько подкатегорий, и эти подкатегории могут иметь подкатегории. Я хочу получить все данные из таблицы и установить его для объекта, а затем преобразовать его в JSON. Связь между категориями и подкатегориями поддерживается ParentId. IsLast свойство говорит мне, что у этой категории больше нет подкатегорий. Для категории с IsLast, установленной в значение true, будет List<Recipe>.

public class Category
{
    public int id { get; set; }
    public string categoryName { get; set; }
    public string categoryDesc { get; set; }
    public bool isLast { get; set; }
    public int parentId { get; set; }
    public int level { get; set; }
    public List<Category> Category { get; set; }
    public List<Recipe> Recipe { get; set; }
}


public class Recipe
{
    public int id { get; set; }
    public string RecipeName { get; set; }
    public string RecipeDesc { get; set; }

}

public class CategoryRecipe
{
    public int RecipeId { get; set; }
    public int CategoryId { get; set; }
}

Я пробовал что-то подобное, но приведенный ниже код не работает. Не могли бы вы предложить какой-нибудь подход.

public CategoryDto GetAllCategories(int parentId, int level)
{
    CategoryDto category = new CategoryDto();
    Category mainCategory = null;

    if (parentId == 0)
    {
        mainCategory = _categoryRepository.GetAll().Where(x => x.Level == 0).FirstOrDefault();
    }
    else
    {
        mainCategory = _categoryRepository.GetAll().Where(x => x.ParentId == parentId).FirstOrDefault();
    }

    if (mainCategory == null)
    {
        return null;
    }

    if (mainCategory.IsLast == true)
    {
        category.RecipeTemplate = ObjectMapper.Map<List<CategoryRecipe>>(_categoryRecipeTypesRepository.
            GetAll().Where(x => x.CategoryId == mainCategory.Id).ToList());
        return category;
    }

    var subcategories = _categoryRepository.GetAll().Where(x => x.ParentId == mainCategory.Id).ToList();


    var tempList = new List<Category>();
    foreach (Category cat in subcategories)
    {
        var subcategory = GetAllCategories(cat.Id, level + 1);

        if (subcategory != null)
        {
            tempList.Add(ObjectMapper.Map<Category>(subcategory)); //AutoMap
        }
    } 

    category.Category = tempList;

    return category;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...