NHibernate映射与中间表的一对多关系

And*_*riy 2 c# nhibernate nhibernate-mapping fluent-nhibernate-mapping

如何定义映射而不进行中间class PostTag创建?我有三张桌子

t_post(id...)
t_tag(id, name)
t_post_tag(id,post_id, tag_id)
Run Code Online (Sandbox Code Playgroud)

我希望在Post类型中有一个带有Tags的集合:

class Post
{
    public virtual IEnumerable<Tag> Tags{ get; set; }
}
public class Tag
{
}
Run Code Online (Sandbox Code Playgroud)

映射:

<?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>
Run Code Online (Sandbox Code Playgroud)

Rad*_*ler 5

要映射配对表,没有显式实体来表示它,我们必须使用<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>
Run Code Online (Sandbox Code Playgroud)

6.3.价值观和多对多关联的集合

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

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

(1)column(必需):元素外键列的名称.
(2)class(必需):关联类的名称.
(3)fetch(可选,默认为join):为此关联启用外连接或顺序选择提取.这是一个特例; 对于实体的完全渴望获取(在单个SELECT中)及其与其他实体的多对多关系,您不仅可以启用集合本身的连接获取,还可以在<many-to-many>嵌套元素上使用此属性.
(4)not-found(可选 - 默认为exception):指定如何处理引用缺失行的外键:ignore将缺少的行视为空关联.

6.8.双向关联

双向关联允许从关联的"两端"导航.支持两种双向关联:

  • one-to-many 一端价值的套装或袋子,另一端是单值的
  • many-to-many 两端有价值的套装或袋子

23.2.作者/工作 (包含完整示例)