【发布时间】:2011-11-07 15:32:38
【问题描述】:
我正在尝试使用 StatelessSession 批量更新实体。
因为它是无状态的,NHibernate 不会在保存时自动级联子实体。
这很好,因为我不想对任何子实体进行任何更改。
不幸的是,在保存时,NHibernate 抱怨:
“对象引用了一个未保存的瞬态实例 - 在刷新之前保存瞬态实例。类型:MyAssembly.MyRandomEntity,实体: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>
【问题讨论】:
-
为什么代理是瞬态的?如果它是在检索它时创建的,那么 unsavedvalue 的映射是不正确的。否则是谁在创造它?
-
取回的时候一定要创建,我没动。映射会以什么方式出错?我正在使用 Fluent Nhibernate,并且没有对该子实体的映射做任何特定的事情。
-
MyRandomEntity的 id 映射是什么样的? -
嗯,这是个好问题...我正在使用 Sharp Architecture (EntityWithTypedId
, IHasAssignedId ),所以它都被隐藏了... -
已编辑问题以包含映射...这有帮助吗?
标签: nhibernate sharp-architecture stateless-session