NHibernate:映射IList属性

akr*_*nov 4 c# nhibernate

我有下一个表Order,Transaction,Payment.类Order有一些属性:

public virtual Guid Id { get; set; }
public virtual DateTime Created { get; set; }
...
Run Code Online (Sandbox Code Playgroud)

我又增加了两个:

public virtual IList<Transaction> Transactions { get; set; }
public virtual IList<Payment> Payments { get; set; }
Run Code Online (Sandbox Code Playgroud)

如何保存TransactionsPayments列出数据库中的(关系)?

Lac*_*che 7

请参阅参考文档中的集合映射.有几种方法可以映射IList属性.

是无序的,未加索引的集合可以多次包含相同的元件.

<bag name="Transactions" lazy="true" table="Transaction" >
    <key column="OrderId"/>
    <one-to-many class="Transaction"/>
</bag>
Run Code Online (Sandbox Code Playgroud)

是一个无序,没有索引的集合包含独特的元素.

<set name="Transactions" lazy="true" table="Transaction" >
    <key column="OrderId"/>
    <one-to-many class="Transaction"/>
</set>
Run Code Online (Sandbox Code Playgroud)

一个列表是一个有序和索引的集合并且可能多次包含相同的元素.

<list name="Transactions" lazy="true" table="Transaction" >
    <key column="OrderId"/>
    <index column="ordering"/>
    <one-to-many class="Transaction"/>
</list>
Run Code Online (Sandbox Code Playgroud)

NHibernate可以使用sort属性以排序顺序返回无序集合.

没有提到级联,没有讨论收集映射我们完整.这使得父实体上的操作可以应用于集合实体.

  • 在一个<many-to-one><many-to-many>关联上启用级联通常没有意义.级联通常是有用<one-to-one><one-to-many>协会.
  • 如果子对象的生命周期受父对象的生命周期限制,则通过指定cascade ="all-delete-orphan"将其设置为生命周期对象.
  • 否则,您可能根本不需要级联.但是如果你认为你经常在同一个交易中与父母和孩子一起工作,并且你想节省一些打字,可以考虑使用cascade ="persist,merge,save-update"