即使我使用列表,NHibernate也会删除并重新创建一对多关联

时间:2013-07-11 18:37:27

标签: nhibernate nhibernate-mapping

行,

我花了很长时间用NHibernate 3.3.1.4研究它。问题我有一个列表,如下所示:

 <class xmlns="urn:nhibernate-mapping-2.2" name="Domain.Model.Orders.Order, Domain.Model, Version=1.0.0.21730, Culture=neutral, PublicKeyToken=null" table="Orders">
<composite-id name="ID">
  <key-property name="PartitionKey" type="System.Nullable`1[[System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <column name="PartitionKey" />
  </key-property>
  <key-property name="ID" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
    <column name="ID" />
  </key-property>
</composite-id>
<version generated="always" name="SystemTimestamp" type="BinaryBlob" unsaved-value="">
  <column name="SystemTimestamp" />
</version>

<list cascade="none" lazy="false" name="LineItems" table="OrderLineItems">
  <key not-null="true">
    <column name="PartitionKey" />
    <column name="Order_ID" />
  </key>
  <index>
    <column name="ListIndex" />
  </index>
  <composite-element class="MemberSuite.Domain.Model.Orders.OrderLineItem, MemberSuite.Domain.Model, Version=1.0.0.21730, Culture=neutral, PublicKeyToken=null">

    <property name="Total" type="System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Total" />
    </property>

  </composite-element>
</list>

您可以看到Orders有许多OrderLineItems。每当我更改任何lineitem时,NHibernate都会删除所有订单项并重新插入它们;随着时间的推移,这会导致非常糟糕的索引碎片。我想让NHibernate简单地更新已经改变的项目。

从我所读到的,这是行李的正常行为,因为NH不能唯一地识别行李中的实体。但对于Lists,NHibernate 应该能够通过列表索引执行此操作 - 但NH仍在执行DELETE-INSERT。所以我的问题是:

hbm 对于使NH行为正常的列表应该是什么样的?

和...

有没有办法用最新的Fluent NHibernate生成这个HBM?

0 个答案:

没有答案