NHibernate连续发出INSERT和UPDATE

时间:2010-07-04 04:10:58

标签: c# nhibernate

任何人都知道为什么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>

我的配置中是否遗漏了一些内容?

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

我认为你需要在widgetplacement类上使用inverse = true。