行,
我花了很长时间用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?