No estoy seguro de cómo hacer la pregunta, porque no sé lo que no sé y, por lo tanto, no conozco la terminología adecuada para lo que estoy tratando de obtener la respuesta. Explicaré mi escenario, con la esperanza de que ayude:Mapeo NHibernate de la colección de búsqueda (si tiene sentido)
Tengo tres tablas, una mesa Book, una tabla Tag y una tabla de búsqueda BookTag.
Cada libro tiene una identificación, un título (para los principiantes) Cada etiqueta tiene una identificación, y un título Cada BookTag tiene un ID, un BookID, y un TagID.
Un libro se puede etiquetar con varias etiquetas, y una etiqueta se puede utilizar en más de un BookID.
Tengo mi configuración de los objetos de esta manera:
Book.cs
int BookID
string Title
List<BookTag> Tags
Tag.cs
int TagID
string Title
BookTag.cs
int ID
int BookID
int TagID
Me gustaría que la clase Books.cs a tener una colección de etiquetas, y no BookTags, pero me parece que no puede obtener el derecho de asignación en NHibernate. Esto es lo que tengo para el archivo 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>
y este es mi 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>
Bajo este modelo, puedo llegar a la etiqueta Quiero usar mi modelo de objetos: Book.Tags [0] .Tag, pero eso parece ineficiente. ¿Puedo usar NHibernate para trazar BookTags.TagID con Tags.TagID en la base de datos para que pueda obtener Book.Tags [0] para devolver un objeto Tag, en lugar de un objeto BookTags? No sabía de una mejor manera de asociar libros a etiquetas para que una etiqueta utilizada en Book1 se pueda usar en Book2 sin agregar una nueva entrada a la tabla de etiquetas.
Espero que esto tenga algo de sentido. Avíseme si necesita más aclaraciones. Voy a publicar mi solución aquí si la descubro antes de que alguien responda.
gracias por esta pregunta !!!!! ~ –