2009-07-31 1 views
0

У меня есть модель данных, в которой я не уверен, что я поддерживаю nHibernate - было интересно, может ли кто-нибудь сказать мне, будет ли это делать, и если да, то как это сделать. Основная структура:nHibernate «HasMany» без явных FKs

create table Container (
    id int identity(1,1) NOT NULL, 
    root_item_id int 
) 

create table ItemRelationship (
    id int identity(1, 1) NOT NULL, 
    parent_item_id INT, 
    child_item_id INT 
) 

create table Item (
    id int identity(1, 1) NOT NULL, 
    description VARCHAR(20) 
) 

Таким образом, в двух словах: 1) Контейнер имеет корневой элемент 2) Элементы могут иметь детей товары

То, что я хочу, это свойство на моей сущности «контейнер», представляет собой сборник предметов, которые являются ДЕТЯМИ его корневого предмета. Я могу видеть, как установить «прямые» FK отношения, но это один немного необычно, так как цепочка отношений является:

Container.root_item_id -> ItemRelationship.parent_item_id

Там не явный FK там. Я предполагаю, что мне нужно каким-то образом использовать метод «Где», но я не уверен, как - не смог найти примеры. Есть идеи?

ответ

0

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

У вас есть много отношений между элементами (поддерживается в таблице ItemRelationship). Поэтому по умолчанию вы должны иметь возможность определять класс Item со свойством для него для ChildItems (ваш ClassMap для этого будет иметь вызов HasManyToMany()). Класс Container будет иметь свойство Root_Item типа Item (который, как только что упоминалось, имеет список ChildItems). Затем вы можете создать свойство удобства в контейнере, которое возвращает дочерние элементы его Root_item. например:

public class Container 
{ 
    public virtual Item Root_Item { get; set; } 

    public List<Item> ChildItems 
    { 
     get { 
      if (Root_Item != null) 
       return Root_Item.ChildItems; 
      return new List<Item>(); // or null depending on how you want to handle this 
     } 
    } 
} 
+0

Это дало мне то, в чем я нуждался! Благодаря! – Marty

 Смежные вопросы

  • Нет связанных вопросов^_^