我正在尝试使用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,Cascade设置为None(由于其他原因,我需要在没有这些实体的情况下使用它们 对象图上下的分支。)
*中等复杂,我的意思是我有一个具有6到10个属性的对象,这些属性是子实体的列表。许多子实体也有子实体。在最复杂的情况下,根实体下有5代实体。
答案 0 :(得分:0)
我认为这是因为您的映射似乎不正确。
根据the NHibernate Reference,id标签有一个“column”属性来设置列名,而不是子元素。
答案 1 :(得分:0)
尝试使用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">