Как создать рекурсивную ассоциацию в SQL Server и пройти через нее в C # с Entity Framework? - PullRequest
0 голосов
/ 13 июня 2011

Я пытаюсь спроектировать базу данных для вопросника, а затем приложение, которое может отображать этот вопросник.

В моей базе данных у меня есть таблица сущностей с именем Category.Каждая категория может иметь несколько подкатегорий, каждая из которых может иметь несколько подкатегорий и т. Д. Это рекурсивная ассоциация.

В настоящее время я разработал ее следующим образом:

[Table: Category]
category_id
category_number
category_name
parrent_id

[Table: Question]
question_id
question_number
question_wording
question_category

Конкретным примером будет:

- Categories

category_id = 1
category_number = 1
category_name = Milk Products
parret_id = null

category_id = 2
category_number = 1.1
category_name = Cheese
parent_id = 1

category_id = 3
category_number = 1.1.1
category_name = Soft
parrent_id = 2

- Questions

question_id = 1
question_number = 1
question_wording = "From 1-5, how much do you like soft cheese?"
category_id = 3

question_id = 2
question_number = 1
question_wording = "How much do you like cheese?"
category_id = 2

Как бы я прошел по категориям и отобразил бы каждую категорию и вопрос следующим образом:

Questionnarie
- Milk products
-- Cheese
-- "How much do you like cheese?"
--- Soft-Cheese
--- "From 1-5, how much do you like soft cheese?"

Я использую структуру сущностей для загрузки своей базы данных в c #

Заранее спасибо!

1 Ответ

1 голос
/ 13 июня 2011

Вы бы сделали это так же, как и с обычным кодом C #. Вы можете сделать рекурсивные вызовы функций:

public IEnumerable<Category> GetSubCategoriesFor(int catId)
{
    var subs = db.Categories.Where(c => c.ParentId == catId);

    foreach (var sub in subs)
    {
        yield return sub;

        // Recursive call
        foreach (var subsub in GetSubCategoriesFor(sub.Id))
        {
            yield return subsub;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...