【发布时间】:2015-03-25 21:25:44
【问题描述】:
我正在使用 NHibernate 和 SQL Server 构建一个 C# 应用程序。当我尝试保存实体(使用身份生成器)时,我收到错误“插入后无法检索生成的 id”。有谁知道为什么我实际上得到这个错误?我是否配置错误?我应该如何解决这个问题?
我已经在 MySQL 中做了一千次,没有任何问题。 谢谢。
数据库:
CREATE TABLE [dbo].[SubscriptionType] (
SubscriptionTypeID INT NOT NULL IDENTITY(1,1),
Name VARCHAR(255) NOT NULL
PRIMARY KEY(SubscriptionTypeID)
);
休眠映射:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="Studshake"
namespace="Studshake.Models">
<class name="CompanySubscriptionType" table="[SubscriptionType]" lazy="false">
<id name="SubscriptionTypeID" column="SubscriptionTypeID">
<generator class="native" />
</id>
<property name="Name" column="Name" />
</class>
</hibernate-mapping>
错误:
[SqlException (0x80131904): 'LAST_INSERT_ID' 不是可识别的内置函数名。]
【问题讨论】:
-
因为 nhibernate 没有被告知 SQL Server 使用 SCOPE_IDENTITY() 而不是 LAST_INSERT_ID?
-
啊,好吧,这可能是个愚蠢的问题,但我如何设置 nhibernate 以使用 SCOPE_IDENTITY() ?
-
对不起,不知道。你确定 nhibernate 通过 config 知道你正在使用 SQL Server 吗?
-
你太棒了,谢谢!我仍在使用 NHibernate.Dialect.MySQLDialect 而不是 NHibernate.Dialect.MsSQL2012Dialect。
标签: c# sql-server nhibernate last-insert-id