我正面临这个奇怪的问题,花了几个小时。一点帮助将不胜感激。这是一个 ASP.NET MVC 应用程序。为简单起见,我有两个 SQL 表,Employee(ID,Name,JoiningDate)和Benefits(ID,EmployeeID)。两个 ID 都是身份列。当新员工加入公司时,会在员工表和福利表中创建一个条目。
存储过程如下所示
alter procedure usp_CreateEmployee
@Name nvarchar(100),
@JoiningDate datetime
as
declare @lastIdentity int
insert into Employee(Name, JoiningDate) values(@Name, @JoiningDate)
select @lastIdentity = ident_current('Employee')
insert into Benefits(EmployeeID) values(@lastIdentity)
C# 方面我正在使用 Dapper
var parameters = new DynamicParameters();
parameters.Add("@Name", name);
parameters.Add("@JoiningDate", joiningDate);
affectedRows = connection.Execute("usp_CreateEmployee", parameters, null, commandType: CommandType.StoredProcedure);
当我在 SSMS 中执行存储过程时,一切正常。(ident_current 返回最后插入的 id)。但是,当用户界面(通过 razor 页面)创建员工时,会在福利表中插入一个 NULL 作为 EmployeeID。员工表显示正确的员工 ID。
看起来不像是 SQL 问题。我的代码有什么问题吗?这可能与 Dapper 有关(尽管我不这么认为)?