任何人都知道为什么NHibernate会这样做?看起来对我来说是疯狂的,而且它(显然)会崩溃我的应用程序,因为它正在尝试更新主键列。这是它正在做的事情。
首先,它插入一条记录:
INSERT INTO WidgetConfigurationPositions
(WidgetId,
TargetId)
VALUES (256 /* @p0 */,
'row1-column2' /* @p1 */)
select SCOPE_IDENTITY()
它发出的下一个声明是对该记录的更新!
UPDATE WidgetConfigurationPositions
SET WidgetConfigurationId = null,
TargetId = null
WHERE WidgetConfigurationId = 96 /* @p0 */
AND Id = 302 /* @p1 */
亲爱的主人为什么会这样做?以下是该实体的相关配置:
<class name="Backplane.WidgetConfiguration, Backplane" table="WidgetConfigurations">
<id name="Id" column="Id">
<generator class="native" />
</id>
<property name="Name" column="ConfigurationName" />
<map name="Widgets" table="WidgetConfigurationPositions" cascade="all" lazy="false" fetch="select">
<key column="WidgetConfigurationId" />
<index column="TargetId" type="string" />
<one-to-many class="Backplane.WidgetPlacement"/>
</map>
</class>
<class name="Backplane.WidgetPlacement, Backplane" table="WidgetConfigurationPositions">
<id name="Id" column="Id">
<generator class="native" />
</id>
<many-to-one name="Widget" class="Backplane.Widget, Backplane" column="WidgetId" lazy="false" />
<property name="Target" column="TargetId" />
<map name="Options" table="PlacedWidgetOptions" cascade="all" lazy="false" fetch="select">
<key column="WidgetConfigurationPositionId"/>
<index column="OptionName" type="string" />
<element column="OptionValue" type="string" />
</map>
</class>
我的配置中是否遗漏了一些内容?
答案 0 :(得分:3)
http://nhibernate.info/doc/nhibernate-reference/collections.html#collections-onetomany(阅读最后一句)
完美记录了这一点答案 1 :(得分:2)
我认为你需要在widgetplacement类上使用inverse = true。