Обновление сущности и игнорирование дочерних прокси при использовании NHibernate StatelessSession - PullRequest
1 голос
/ 31 августа 2011

Я пытаюсь массово обновить сущности, используя StatelessSession.

Поскольку NHibernate не имеет состояния, он не может автоматически каскадировать дочерние объекты при сохранении.

Это нормально, потому что я не хочу вносить какие-либо изменения в какие-либо дочерние объекты.

К сожалению, после сохранения NHibernate жалуется:

"объект ссылается на несохраненный временный экземпляр - сохраните временный экземпляр перед сбросом. Тип: MyAssembly.MyRandomEntity, Entity: Castle.Proxies.MyRandomEntityProxy"

Конечно, если я пытаюсь обновить дочернюю сущность, я получаю ошибку:

«Не сохранять для: Castle.Proxies.MyRandomEntityProxy»

Как видите, дочерняя сущность является прокси, потому что она не была загружена. Мне это не нужно, я не хочу его обновлять ... но даже если бы я это сделал, я не уверен, как мог.

Любая идея, как решить эту проблему, в основном сказать ей, чтобы игнорировать переходные дочерние объекты?

Обновление

Вот отображение для дочерней сущности на родительский объект:

<many-to-one class="MyAssembly.Flight, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="OutboundFlight">
  <column name="OutboundFlightId" />
</many-to-one>

Вот столбец Id дочерней сущности:

<id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" unsaved-value="0">
  <column name="FlightId" />
  <generator class="assigned" />
</id>

1 Ответ

1 голос
/ 05 сентября 2011

используется назначенный генератор, который использует «unsavedvalue», чтобы узнать, является ли экземпляр постоянным или временным. Может быть, в базе действительно есть Flightobject с id = 0? Затем он будет создан как прокси с Id = 0, который будет рассматриваться как временный экземпляр.

...