【发布时间】:2010-05-23 14:21:18
【问题描述】:
我有休闲问题: 我必须表 SalesHeader 和 SalesPosition - 其中 SalesPosition 是 SalesHeader 的子项。 现在。在表 SalesHeader 中,有一个持久实体 X。我现在尝试在 SalesPosition 中保留一个实体,只给这个实体 X(SalesHeader)的键。 NHibernate 不必在 SalesHeader 中保存一些数据。现在,当我将实体刷新到 SalesPosition 时,我成为了闲散的例外:
对象引用了一个未保存的瞬态实例 - 在刷新之前保存瞬态实例。
在 NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsaved(String entityName, Object entity, ISessionImplementor session) 在 NHibernate.Type.EntityType.GetIdentifier(对象值,ISessionImplementor 会话) 在 NHibernate.Type.ManyToOneType.IsDirty(旧对象,当前对象,布尔 [] 可检查,ISessionImplementor 会话) 在 NHibernate.Type.TypeFactory.FindDirty(StandardProperty[] 属性,Object[] x,Object[] y,Boolean[][] includeColumns,Boolean anyUninitializedProperties,ISessionImplementor 会话) 在 NHibernate.Persister.Entity.AbstractEntityPersister.FindDirty(Object[] currentState, Object[] previousState, Object entity, ISessionImplementor session) 在 NHibernate.Event.Default.DefaultFlushEntityEventListener.DirtyCheck(FlushEntityEvent 事件) 在 NHibernate.Event.Default.DefaultFlushEntityEventListener.IsUpdateNecessary(FlushEntityEvent 事件,布尔可能BeDirty) 在 NHibernate.Event.Default.DefaultFlushEntityEventListener.OnFlushEntity(FlushEntityEvent 事件) 在 NHibernate.Event.Default.AbstractFlushingEventListener.FlushEntities(FlushEvent 事件) 在 NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions(FlushEvent 事件) 在 NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent 事件) 在 NHibernate.Impl.SessionImpl.Flush() 在 NHibernate.Transaction.AdoTransaction.Commit()
这是我的 SalesPosition 映射:
<class name="SalesPosition" table="SalesPosition" lazy="false" >
<id name="Id" column="Id" type="Guid">
<generator class="assigned"/>
</id>
<version name="ObjectVersion" column="ObjectVersion"/>
.... some fields
<many-to-one name="SalesHeader" class="SalesHeader" foreign-key="FK_SalesHeader_SalesPosition" >
<column name="SalesHeaderId"/>
</many-to-one>
</class>
这是SalesHeader的映射:
<class name="SalesHeader" table="SalesHeader" lazy="false" >
<id name="Id" column="Id" type="Guid">
<generator class="assigned"/>
</id>
<version name="ObjectVersion" column="ObjectVersion"/>
... some fields
<set name="SalesPosition" lazy="true" inverse="true" cascade="delete" >
<key>
<column name="SalesHeaderId"/>
</key>
<one-to-many class="SalesPosition"/>
</set>
</class>
谁能给我一个提示,我必须做什么,我只能将 SalesHeader 的密钥提供给 SalesPosition-Entity 以进行持久化(或者 SalesHeader-Entity 和 NHibernate 仅使用密钥)。
我使用的是最新版本的 NHibernate。
谢谢。
最好的问候,托马斯
【问题讨论】:
-
抱歉,您的问题很难理解。我现在只能说:如果 SalesPosition 是一个子 SalesHeader(一对多关系,类似于账单和账单项目),那么您对 SalesHeader 的映射是错误的,因为您正在执行映射,就好像它是一个多对-许多关系。
标签: nhibernate