Нужна помощь и совет в создании сложных отношений в EF 4.1 - PullRequest
0 голосов
/ 21 ноября 2011

Потратив так много часов, пытаясь заставить это работать, я должен признать, что я близок к тому, чтобы вырвать свои волосы и получить некоторую помощь, прежде чем это действительно произойдет!

Это очень труднообъяснить фактическое приложение вне контекста - это лучший пример, который я могу придумать.

public class TheObject{
    public int ID {get;set;}
    public string name {get;set;}

    public int? CategoryNavID {get;set;}
    public virtual Category CategoryNav {get;set;}}

public class CategoryNav{
    public int id {get;set;}
    public virtual ICollection<Category> Category {get;set;}}

public class Category{
    public int ID {get;set;}
    public string name {get;set;}

    //The category this is currently in.
    public int CategoryNavID

    //To create sub categories.
    public int? CategoryID {get;set;}
    public virtual Category Category {get;set;}}

Итак, в основном, существует множество объектов, к объекту может быть присоединено столько же категорий, и далееэто, категория может иметь несколько категорий (к бесконечному уровню).

Опять же, трудно объяснить вне контекста - это не настоящая система, но это конечная цель, которую я пытаюсь достичь.

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

Я просто хочу решениегде я могу легко получить объект, затем перейти по всем категориям, а затем по всем подкатегориям до бесконечного уровня.(В данный момент я думаю получить объект, а затем, если CategoryNavID не равен NULL, получить все содержимое и в основном продолжать делать это для всех возвращаемых категорий)

Я очень близко подошел кэто, но я просто не могу разработать аннотации EF FluentAPI / Data, необходимые для того, чтобы иметь более одной ссылки из категории обратно в навигацию по категориям.

Наконец, я также хотел бы, если возможно, найти способполучите CategoryNav / ID и получите исходный объект, которому он принадлежит - даже если это последняя подкатегория - 20 по цепочке.Это совсем не обязательно, поскольку у меня есть логика * - я просто уверен, что не делаю это самым эффективным способом.- В настоящее время думаю, что было бы проще создать FK «TheObject» в категории - я знаю, что вы не должны повторять данные там, где они не нужны, но я думаю, что это будет самое простое решение на сегодняшний день.

* В настоящее время я иду очень далеко - получаю идентификатор категории / Nav, проверяю, существует ли она как Object/CategoryNavID, и если нет, она возвращается к категории,и ищет любую категорию, указав ее в качестве categoryID, затем получает этот идентификатор категории и, в основном, продолжает циклировать это действие до тех пор, пока не найдет верхний объект.

В любом случае, вся / любая помощь будет чрезвычайно полезна!С удовольствием отвечу на любые вопросы.

1 Ответ

1 голос
/ 21 ноября 2011

Если я правильно понимаю ваш вопрос, вы, по сути, хотите, чтобы между вашим классом TheObject и Category существовали отношения "многие ко многим". Если вы думаете об этом с точки зрения SQL, у вас есть таблица TheObject, таблица Category и таблица соединений, которые вы, возможно, пытались реализовать с помощью класса CategoryNav.

Прочтите эти посты, чтобы узнать, как сначала создать отношения «многие ко многим» с кодом EF:

Что касается дерева категорий, вам нужно, чтобы отношение «один ко многим» было таким, чтобы у каждой подкатегории была только одна родительская категория, в противном случае вы имеете дело с графом, который значительно усложнит обход.

И, наконец, что касается класса CategoryNav, я не уверен в том, что вы пытаетесь достичь с этим, кроме как в виде ссылки на категории, связанные с TheObject. Разве не было бы проще иметь коллекцию Category в вашем классе TheObject или есть какой-то другой смысл, стоящий за CategoryNav?

...