Свободное NHibernate группирование нескольких строк в свойство коллекции - PullRequest
3 голосов
/ 10 августа 2010

У меня есть классы типа

public class Content
{
    // ...
    public virtual IList<Detail> { get; set; }
}
public class Detail
{
    // ...
    public virtual Content Content { get; set; }
    public virtual string Name { get; set; }
}
public class TagDetail : Detail
{
    public virtual Tag Value { get; set; }
}
public class TagCollectionDetail : Detail
{
    public virtual IList<Tag> Value{ get; set; }
}

, и я хотел бы отобразить эти данные в таблицу

Details -table
contentId    name    type            tagId
1            Tag     Tag             2
2            Tags    TagCollection   1
2            Tags    TagCollection   3
2            Tags    TagCollection   6

Можно ли сгруппировать несколько строк в один объект с помощью Fluent NHibernate (как)?Я знаю, что плохо повторять информацию (Detail.Name, Detail.Type) подобным образом, но поиск будет намного проще.

Или мне нужно отобразить его на две таблицы?

Details -table
contentId    name    type            tagId
1            Tag     Tag             2
2            Tags    TagCollection

DetailsCollection -table
detailId    tagId
2           1
2           3
2           6

1 Ответ

0 голосов
/ 10 января 2011

Я бы смоделировал это следующим образом:

Detail (table)
    - DetailId (col), PK
    - ContentId (col), FK to Content table
    - Name (col)

Tag (table)
    - TagId, PK
    - Other tag columns

TagDetail (table), only 1 row per Detail
    - TagDetailId (col), PK
    - DetailId (col), FK to Detail table
    - TagId, FK to Tag table

TagCollectionDetail (table), there would be many rows of this per Detail
    - TagCollectionDetailId, PK
    - DetailId (col), FK to Detail table
    - TagId, FK to Tag table

PK = первичный ключ, FK = внешний ключ.Я бы установил эти столбцы в число / целочисленный тип, который автоматически увеличивается.NHibernate не очень хорошо работает (или вообще может быть) с таблицами без первичных ключей.

Думая об этом еще больше, я не понимаю, почему у вас есть TagDetail и TagCollectionDetail.TagDetail - это особый случай TagCollectionDetail, где есть только 1 тег.Я думаю, что вы можете избавиться от TagDetail.

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