NHibernate查找集合的映射(如果有意义的话)

我不知道如何提出问题,因为我不知道我不知道什么,因此我不知道我正在试图得到答案的正确术语。 我将解释我的情景,希望它会有所帮助:

我有三个表,一个Book表,一个Tag表和一个BookTag查找表。

每本书都有一个ID,一个标题(对于初学者)每个标签都有一个ID,标题每个BookTag都有一个ID,一个BookID和一个TagID。

可以使用多个标签标记书籍,并且可以在多个BookID上使用标签。

我已经以这种方式设置了我的对象:

Book.cs int BookID string Title List Tags Tag.cs int TagID string Title BookTag.cs int ID int BookID int TagID 

我希望Books.cs类有一组标签,而不是BookTags,但我似乎无法在NHibernate中获得正确的映射。 这就是我为Book.hbm.xml文件所做的:

              

这是我的BookTag.hbm.xml:

               

在这个模型下,我可以通过使用我的对象模型得到我想要的标签:Book.Tags [0] .Tag,但这看起来效率低下。 我可以使用NHibernate将BookTags.TagID映射到数据库中的Tags.TagID,以便我可以让Book.Tags [0]返回Tag对象,而不是BookTags对象吗? 我不知道将Books与标签关联的更好方法,以便可以在Book2上使用Book1上使用的标签,而无需在Tags表中添加新条目。

我希望这至少有一定意义。 如果您需要进一步澄清,请与我们联系。 如果我在有人回答之前搞清楚,我会在这里发布我的解决方案。

您根本不需要BookTag类。 您可以将Book.Tags集合映射为多对多。 为此,您将在地图中指定BookTag以连接关联。 请参见6.8章节双向关联。

谢谢蒂姆,这就是我所需要的。 对于那些好奇的人,我“取消映射”BookTag表/对象,现在只有一个Book对象和一个Tag对象被使用并映射到NHibernate。

我的Book.hbm.xml已更新为: