2010-08-10 48 views
3

我上課喜歡功能NHibernate分組多行集合屬性

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 

是否有可能將多個行與一個對象流利的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 

回答

0

如下我會對此建模:

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。