Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NHibernate-保存子项-仅从父项设置密钥_Nhibernate - Fatal编程技术网

NHibernate-保存子项-仅从父项设置密钥

NHibernate-保存子项-仅从父项设置密钥,nhibernate,Nhibernate,我有休闲问题: 我必须列出SalesHeader和SalesPosition,其中SalesPosition是SalesHeader的子级。 现在。在表SalesHeader中,有一个持久化实体X。我现在尝试在SalesPosition中持久化一个实体,只给这个实体X(of SalesHeader)的键。NHibernate不必在SalesHeader中保存一些数据。现在,当我将实体刷新到SalesPosition时,我将成为一个例外: 对象引用未保存的临时实例-在刷新之前保存临时实例 位于NH

我有休闲问题: 我必须列出SalesHeader和SalesPosition,其中SalesPosition是SalesHeader的子级。 现在。在表SalesHeader中,有一个持久化实体X。我现在尝试在SalesPosition中持久化一个实体,只给这个实体X(of SalesHeader)的键。NHibernate不必在SalesHeader中保存一些数据。现在,当我将实体刷新到SalesPosition时,我将成为一个例外:

对象引用未保存的临时实例-在刷新之前保存临时实例

位于NHibernate.Engine.ForeignKeys.GetEntityIdentifierIfNotUnsave(字符串entityName、对象实体、ISessionImplementor会话) 位于NHibernate.Type.EntityType.GetIdentifier(对象值,ISessionImplementor会话) 在NHibernate.Type.ManyToOneType.IsDirty(对象旧、对象当前、布尔[]可检查、ISessionImplementor会话) 在NHibernate.Type.TypeFactory.findderty(标准属性[]属性,对象[]x,对象[]y,布尔值[][]includeColumns,布尔值anyUninitializedProperties,ISessionImplementor会话) 位于NHibernate.Persister.Entity.AbstractEntityPersister.FindParty(对象[]当前状态,对象[]先前状态,对象实体,ISessionImplementor会话) 在NHibernate.Event.Default.DefaultFlushEntityEventListener.DirtyCheck(FlushEntityEvent事件)中 在NHibernate.Event.Default.DefaultFlushEntityEventListener.IsUpdateNecessary(FlushEntityEvent事件,布尔值可能为Dirty) 在NHibernate.Event.Default.DefaultFlushEntityEventListener.OnFlushEntity(FlushEntityEvent事件)中 位于NHibernate.Event.Default.AbstractFlushingEventListener.FlushEntities(FlushEvent事件) 在NHibernate.Event.Default.AbstractFlushingEventListener.FlushEverythingToExecutions(FlusheEvent事件)中 在NHibernate.Event.Default.DefaultFlushEventListener.OnFlush(FlushEvent事件) 在NHibernate.Impl.SessionImpl.Flush()处 在NHibernate.Transaction.AdoTransaction.Commit()处

这是我对SalesPosition的映射:


.... 一些领域

这是SalesHeader的映射:


... 一些领域

有谁能告诉我一个提示,我必须做的是,我只能将SalesHeader的键交给SalesPosition实体进行持久化(或者SalesHeader实体和NHibernate仅使用该键)

我使用NHibernate的最新版本

多谢各位


向您致意,Thomas

如果我正确理解您的问题,您正在尝试保存SalesPosition实例,但您只想设置SalesPosition.SalesHeader.Id,而不是将SalesPosition.SalesHeader设置为SalesHeader的实例。您可以使用ISession.Load完成这一任务;解释它是如何工作的。基本上,如果知道数据库中存在实体,可以使用Load为对象创建代理,而不是从数据库获取代理。这在无状态(web)应用程序中非常方便。使用方法如下:

mySalesPosition.SalesHeader = session.Load<SalesHeader>(salesHeaderId);
session.Flush();
mySalesPosition.SalesHeader=session.Load(salesHeaderId);
session.Flush();

对不起,您的问题很难理解。现在我只能说:如果SalesPosition是一个子SalesHeader(一对多关系,类似于bill和bill items),那么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>
mySalesPosition.SalesHeader = session.Load<SalesHeader>(salesHeaderId);
session.Flush();