我有像
这样的课程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
答案 0 :(得分: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。