我试图使用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列写入insert查询。
我一直在使用映射来读取图表,所以我相当肯定这不是一个基本的映射问题。
FWIW,Cascade设置为None (出于其他原因,我需要处理这些实体,而不需要在对象图上和下面进行分支)。
*所谓中等复杂,我的意思是有一个对象,它有6到10个属性,这些属性是子实体的列表。这些儿童实体中有许多也有儿童实体。在最复杂的情况下,根实体下有5代实体。
发布于 2012-04-12 01:59:17
我认为这是因为你的地图看起来不正确。
根据NHibernate参考,id标记有一个" column“属性来设置列名,而不是子元素。
发布于 2012-04-12 11:51:52
尝试使用dynamic-insert="true"
<class xmlns="urn:nhibernate-mapping-2.2" dynamic-insert="true" 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">https://stackoverflow.com/questions/10115214
复制相似问题