如何设置nhibernate多对多关系

来源:互联网 发布:c语言产生1到9的随机数 编辑:程序博客网 时间:2024/05/16 14:28

定义  关系数据库中两个表之间的一种关系, 该关系中第一个表中的一个行可以与第二个表中的一个或多个行相关。第二个表中的一个行也可以与第一个表中的一个或多个行相关。要表示多对多关系,您必须创建第三个表,该表通常称为联接表,它将多对多关系划分为两个一对多关系。

实例解释:

  比如在常见的订单管理数据库当中“产品”表和“订单”表之间的关系。单个订单中可以包含多个产品。另一方面,一个产品可能出现在多个订单中。因此,对于“订单”表中的每条记录,都可能与“产品”表中的多条记录对应。此外,对于“产品”表中的每条记录,都可以与“订单”表中的多条记录对应。这种关系称为多对多关系,因为对于任何产品,都可以有多个订单,而对于任何订单,都可以包含许多产品。请注意,为了检测到表之间的现有多对多关系,务必考虑关系的双方。

  要表示多对多关系,您必须创建第三个表,该表通常称为联接表,它将多对多关系划分为两个一对多关系。将这两个表的主键都插入到第三个表中。因此,第三个表记录关系的每个匹配项或实例。例如,“订单”表和“产品”表有一种多对多的关系,这种关系是通过与“订单明细”表建立两个一对多关系来定义的。一个订单可以有多个产品,每个产品可以出现在多个订单中。

 

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

column (必需): 这个元素的外键关键字段名

(2)

class(必需): 关联类的名称

(3)

fetch (可选, 默认值join): 为此关联打开外连接抓取或者序列选取抓取。这是特殊情况; 对于一个实体及其指向其他实体的多对多关联进全预先抓取(使用一条单独的SELECT), 你不仅需要对集合自身打开join,也需要对 <many-to-many>这个内嵌元素打开此属性。

(4)

not-found (可选 - 默认为 exception): 指明引用的外键中缺少某些行该如何处理: ignore 会把缺失的行作为一个空引用处理。

<bag name="Sizes" table="SIZES" order-by="SIZE ASC">    <key column="OWNER"/>    <element column="SIZE" type="Int32"/></bag>
原创粉丝点击