首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate忽略GeneratedBy.Identity()

NHibernate忽略GeneratedBy.Identity()
EN

Stack Overflow用户
提问于 2012-04-11 23:05:56
回答 2查看 1.7K关注 0票数 0

我试图使用NHibernate来序列化一个中等复杂的对象图*

实际映射是通过FNH完成的,但我已经转储了HBM文件,并确认生成的XML符合NHibernate约定。

这里有一个HBM的片段,只是为了微笑:

代码语言:javascript
复制
<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调试,为可读性设置代码片段):

代码语言:javascript
复制
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代实体。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-12 01:59:17

我认为这是因为你的地图看起来不正确。

根据NHibernate参考,id标记有一个" column“属性来设置列名,而不是子元素。

票数 0
EN

Stack Overflow用户

发布于 2012-04-12 11:51:52

尝试使用dynamic-insert="true"

代码语言:javascript
复制
<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">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10115214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档