在流畅非hibernate模型中创建一个额外的层
本文关键字:一个 hibernate 模型 创建 | 更新日期: 2023-09-27 18:11:24
在我们的数据库中我们有一个Book
数据库。其中一列和int
一样名为" NumberOfPages
"
我们有第二个名为"BookElements
"的表,它有许多字段并与具有BookId
的Book相关联,但每个BookElement
仅与单个Page相关联,因此它也有PageNumber
列。
在一个Book中可以有多个与单个Page相关的bookelement。理想情况下,我希望有一个流畅的nhibernate模型,这样我们就可以有
Book.Pages[0].BookElement[0].Name
因此,单个Book有许多页(基于其NumberOfPages
列),然后BookElements
的集合与该单个页面相关联。
我不会尝试以这种方式建立关系模型。相反,我将把这种关系建模为标准的一对多关系,并创建一个返回页面bookelement的方法:
public BookElement[] BookElementsForPage(int pageNumber)
{
return BookElements.Where(be => be.PageNumber == pageNumber).ToArray();
}
您可以这样做:
Dictionary<int,IList<BookElement>> BookElements { get; set; }
表示Page->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();
...
}
}
我添加了一个新的图层,使它更容易映射字典