我正在尝试使用 NHibernate 序列化一个中等复杂的对象图*
实际映射是通过 FNH 完成的,但我已经转储了 HBM 文件并确认生成的 XML 符合 NHibernate 约定。
这是 HBM 的一个片段,仅供参考:
<class xmlns="urn:nhibernate-mapping-2.2" schema="obsv" optimistic-lock="version" name="Spc.Ofp.Tubs.DAL.Entities.PurseSeineActivity, TubsDAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="s_daylog">
<id name="Id" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="s_daylog_id" not-null="true" />
<generator class="identity" />
</id>
此映射产生以下 SQL(通过 SQL 调试,为便于阅读而截断):
INSERT INTO obsv.s_daylog (/* columns 0 thru 20 snipped */s_daylog_id /* <-- PK from mapping! */)
VALUES (/* parameters snipped */@p21);
select SCOPE_IDENTITY();@p21 = NULL [Type: Int32 (0)]
我相信“select SCOPE_IDENTITY();”的存在 文本确认 NHibernate 部分理解应该发生的事情。我只是不明白为什么它将 PK 列写入插入查询。
我一直在使用映射来很好地阅读图表,所以我相当肯定这不是一个基本的映射问题。
FWIW,级联设置为无(出于其他原因,我需要使用这些实体而不会对对象图产生影响)。
*适度复杂,我的意思是我有一个对象,它有 6 到 10 个属性,这些属性是子实体的列表。很多这些子实体也有子实体。在最复杂的情况下,根实体下有 5 代实体。