在我们的数据库中,我们有一个Book
数据库。这个列的列之一为int
,称为“NumberOfPages
”
我们有一个名为“BookElements
”的第二个表,它有多个字段,并与一本书BookId
相关联,但每个BookElement
仅与一个页面相关联,因此它还有PageNumber
列。
我们可以将许多BookElements与书中的单个页面相关联。理想情况下,我希望能够以这样的方式使用流利的nhibernate模型
Book.Pages[0].BookElement[0].Name
因此,一本书有多个页面(基于其NumberOfPages
列),然后该页面的集合BookElements
与该单页相关联。
答案 0 :(得分:0)
您可以进行以下操作:
Dictionary<int,IList<BookElement>> BookElements { get; set; }
表示Page-&gt; BookElements
的关系所以你可以做到
if( BookElemets.Keys.Contains(pageNum) )
BookElements[pageNum][elementNum]
添加了解决方案:
class PageElements
{
public virtual int PageNumber { get; set; }
public virtual IList<BookElements> { get; set; }
}
class PageElementsMap : ClassMap<PageElements>
{
public PageElementsMap()
{
Id(x => x.Id).GeneratedBy.Identity().Column("ID");
Map(x => x.PageNumber);
HasMany(x => x.BookElements)
.KeyColumn("PageElementsID")
.Cascade.AllDeleteOrphan();
}
}
public virtual IDictionary<int,PageElements> PageElements { get; set; }
class MainEntityMap : ClassMap<MainEntity>
{
public MainEntityMap()
{
...
HasMany( x => x.PageElements )
.AsMap( x=> x.PageNumber )
.Cascade.AllDeleteOrphan();
...
}
}
我添加了一个新图层,以便更容易地映射字典。
答案 1 :(得分:0)
我不会尝试以这种方式建立关系模型。相反,我会将关系建模为标准的一对多,并创建一个返回页面的BookElements的方法:
public BookElement[] BookElementsForPage(int pageNumber)
{
return BookElements.Where(be => be.PageNumber == pageNumber).ToArray();
}