gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:04:51 25 4
gpt4 key购买 nike

我不确定如何提出这个问题,因为我不知道我不知道什么,因此我不知道我想要得到答案的正确术语。我将解释我的情况,希望它会有所帮助:

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

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

一本书可以有多个标签,一个标签可以用于多个 BookID。

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

Book.cs
int BookID
string Title
List<BookTag> Tags

Tag.cs
int TagID
string Title

BookTag.cs
int ID
int BookID
int TagID

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

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DomainModel" namespace="DomainModel.Books">
<class name="DomainModel.Books.Book" table="Books">
<id name="BookID" type="Int32" unsaved-value="0">
<generator class="native"/>
</id>
<property name="Title" type="String" not-null="true"/>
<set lazy="true" name="Tags" table="BookTags" generic="true" inverse="true" cascade="delete">
<key column="BookID"/>
<one-to-many class="DomainModel.Books.BookTag, DomainModel"/>
</set>
</class>
</hibernate-mapping>

这是我的 BookTag.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DomainModel" namespace="DomainModel.Books">
<class name="DomainModel.Books.BookTag" table="BookTags">
<id column="BookTagID" name="BookTagID" type="Int32" unsaved-value="0">
<generator class="native"/>
</id>
<many-to-one name="Tag">
<column not-null="true" name="TagID"/>
</many-to-one>
<many-to-one name="Book">
<column not-null="true" name="BookID"/>
</many-to-one>
</class>
</hibernate-mapping>

在此模型下,我可以通过使用我的对象模型 Book.Tags[0].Tag 来获取我想要的标签,但这似乎效率不高。我可以使用 NHibernate 将 BookTags.TagID 与数据库中的 Tags.TagID 映射出来,以便我可以让 Book.Tags[0] 返回 Tag 对象,而不是 BookTags 对象吗?我不知道有什么更好的方法可以将 Books 与标签相关联,这样 Book1 上使用的标签就可以在 Book2 上使用,而无需向 Tags 表添加新条目。

我希望这至少有一定道理。如果您需要进一步说明,请告诉我。如果我在有人回答之前弄清楚了,我会在这里发布我的解决方案。

最佳答案

您根本不需要 BookTag 类。您可以将 Book.Tags 集合映射为多对多。为此,您将在 map 中指定 BookTag 以连接协会。看here在第 6.8 节双向关联中。

关于c# - 查找集合的 NHibernate 映射(如果这有意义的话),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/319178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com