如何在不创建中间class PostTag的情况下定义映射?我有三张桌子

t_post(id...)
t_tag(id, name)
t_post_tag(id,post_id, tag_id)


我想要一个帖子类型为“标签”的收藏集
类:

class Post
{
    public virtual IEnumerable<Tag> Tags{ get; set; }
}
public class Tag
{
}


映射:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Sample.Core" namespace="Sample.Core.Domain.Model" xmlns="urn:nhibernate-mapping-2.2">
  <class name="Post" table="t_post" lazy="true" >
    <id name="Id" column="id" type="System.Int64" unsaved-value="-1"  generator="identity">
    </id>
...
    <bag name="Tags" lazy="true" cascade="none" inverse="true">
      <key column="post_id"/>
      <one-to-many class="Tag" />
    </bag>
  </class>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Sample.Core" namespace="Sample.Core.Domain.Model" xmlns="urn:nhibernate-mapping-2.2">
  <class name="Tag" table="t_tag" lazy="true" >
    <id name="Id" column="id" type="System.Int64" unsaved-value="-1"  generator="identity">
    </id>
  </class>
</hibernate-mapping>

最佳答案

要映射配对表而没有显式实体表示,我们必须使用<many-to-many>。还必须存在属性table="..."-以便向NHibernate告知该配对表。 (以防我们将标签分配到帖子中,我们不应将此类映射标记为反向)

<bag name="Tags" table="t_post_tag"
    lazy="true" cascade="none" inverse="true">
  <key column="post_id"/>
  <!--<one-to-many class="Tag" />-->
  <many-to-many class="Tag" column="tag_id"/>
</bag>


6.3. Collections of Values and Many-To-Many Associations


具有自己表的实体的集合对应于多对多关联的关系概念。多对多关联是.NET集合中最自然的映射,但通常不是最佳的关系模型。


<many-to-many
    column="column_name"                               (1)
    class="ClassName"                                  (2)
    fetch="join|select"                                (3)
    not-found="ignore|exception"                       (4)
/>



(1)列(必填):元素外键列的名称。
(2)类(必需):关联的类的名称。
(3)提取(可选,默认为加入):为此关联启用外部结合或顺序选择提取。这是一个特例;为了完全渴望获取(在单个SELECT中)实体及其与其他实体的多对多关系,您不仅要启用集合本身的联接获取,还要启用<many-to-many>嵌套元素上的此属性。
(4)找不到(可选-默认为异常):指定将如何处理引用缺失行的外键:ignore会将缺失行视为空关联。


6.8. Bidirectional Associations


双向关联允许从关联的“两端”进行导航。支持两种双向关联:


one-to-many集或袋的一端为值,另一端为单值
两端均many-to-many套或袋值



23.2. Author/Work(包含完整示例)

关于c# - NHibernate映射与中间表一对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30625609/

10-17 00:52