首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用存储过程和NHibernate插入记录

使用存储过程和NHibernate插入记录
EN

Stack Overflow用户
提问于 2010-06-22 21:34:59
回答 1查看 1.8K关注 0票数 2

通常,参数化SQL非常适合CRUD,但是我有一个实例,我想使用存储过程来执行插入操作。

我的HBM文件包含以下内容(以及一堆其他属性、包等)

代码语言:javascript
复制
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="MyProject.Entities" assembly="MyProject">
  <class name="MyProject.Entities.Policy, MyProject" table="dbo.Policy" lazy="true">
    <id name="Id" column="[PolicyId]">
      <generator class="native" />
    </id>
    <sql-insert>exec spInsertPolicy ?,?,?,?,?,?,?</sql-insert>
  </class>
</hibernate-mapping>

sql-insert中的问号数量与属性和多对一关系的数量相匹配(Id没有问号)。

我得到了以下异常。如果我将生成器切换为“增量”,它可以工作,但我不想这样做,因为允许其他进程保存到数据库中。

代码语言:javascript
复制
NHibernate.HibernateException: The database returned no natively generated identity value
       at NHibernate.Id.IdentifierGeneratorFactory.GetGeneratedIdentity(IDataReader rs, IType type, ISessionImplementor session)
       at NHibernate.Id.IdentityGenerator.InsertSelectDelegate.ExecuteAndExtract(IDbCommand insert, ISessionImplementor session)
       at NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert(SqlCommandInfo insertSQL, ISessionImplementor session, IBinder binder)
       at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Boolean[] notNull, SqlCommandInfo sql, Object obj, ISessionImplementor session)
       at NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object[] fields, Object obj, ISessionImplementor session)
       at NHibernate.Action.EntityIdentityInsertAction.Execute()
       at NHibernate.Engine.ActionQueue.Execute(IExecutable executable)
       at NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate(Object entity, EntityKey key, IEntityPersister persister, Boolean useIdentityColumn, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)

有什么建议吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-22 21:48:08

存储过程必须为插入的记录返回生成的ID,例如,如果您使用的是SQL Server,则在存储过程的末尾返回一个SELECT SCOPE_IDENTITY()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3093577

复制
相关文章

相似问题

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