我有工具实体:
<class name="Instrument" table="Instruments" mutable="false">
<id name="ID" column="INSTRUMENT_ID" unsaved-value="0">
<generator class="assigned" />
</id>
<property name="....." />
<property name="....." />
</class>
此实体在其他实体( InstrumentSelection )中以多对一关系使用。这是多对一的映射信息:
<many-to-one name="Instrument" access="field.camelcase" column="Instrument_ID" update="false" class="Instrument" not-null="true" fetch="join" lazy="false" />
当我用保存保存 InstrumentSelection 实体时,我遇到了这个问题:
Transact(() => session.Save(entity));
我在日志中遇到错误:
2012-12-20 14:09:54,607 WARN 12 NHibernate.Engine.ForeignKeys - Unable 确定仪器是否已分配 标识符11457是暂时的或分离的;查询数据库。使用 在会话中显式保存()或更新()以防止这种情况。
关于工具实体的一些事实:
问题(版本1):我的问题是:有没有办法指示NHibernate始终将Instrument实体视为已分离?我的意思是 - 如果应用程序中存在一个Instrument实例,则意味着它存在于数据库中。所以在查询数据库时没有多大意义。
问题(版本2):NHibernate仍然试图弄清楚实体是否是分离/瞬态的行为是什么?我想我的映射配置正确(未保存值,生成器)。
答案 0 :(得分:2)
问题在于,当您保存InstrumentSelection时,NHibernate正在级联操作以保存子Instruments。我的第一个建议是在关系的InstrumentSelect一侧将级联设置为none。
我的第二个建议是使用this answer中所示的拦截器。