Dapper 를 사용하여 ASP.NET MVC 3 (.NET 4.0) 응용 프로그램의 SQL Server 2008 R2 Express 인스턴스에 대해 다음 쿼리를 실행하고 있습니다.
INSERT INTO Customers (
Type, Name, Address, ContactName,
ContactNumber, ContactEmail, Supplier)
VALUES (
@Type, @Name, @Address, @ContactName,
@ContactNumber, @ContactEmail, @Supplier)
SELECT @@IDENTITY
에 대한 호출에서 connection.Query<int>(sql, ...)
잘못된 캐스트 예외가 발생했습니다. 나는 그것을 디버깅했고 그것이 Dapper가 GetValue
리턴 된 지점에 SqlDataReader
있습니다.
의 반환 형식 GetValue
IS Object
디버거 쇼에서 검사는, 그것은 박스 소수의입니다.
select를으로 변경하면 SELECT CAST(@@IDENTITY as int)
GetValue의 반환은 boxed int이며 예외는 발생하지 않습니다.
Id 열은 확실히 int 유형입니다. 왜 SELECT @@IDENTITY
소수를 반환합니까?
몇 가지 추가 정보 :
- 데이터베이스는 아주 새롭습니다.
- Customers 테이블은 내가 추가 한 유일한 개체입니다. 데이터베이스에는 다른 (사용자) 테이블, 뷰, 트리거 또는 저장 프로 시저가 없습니다.
- 데이터베이스에 10 개의 행이 있고 ID가 1,2,3,4,5,6,7,8,9,10입니다 (즉, 열이 int의 한계를 초과하지 않음).
내 테이블 정의는
CREATE TABLE [dbo].[Customers](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Type] [int] NOT NULL,
[Name] [nvarchar](255) NOT NULL,
[Address] [nvarchar](1000) NOT NULL,
[ContactName] [nvarchar](255) NOT NULL,
[ContactNumber] [nvarchar](50) NOT NULL,
[ContactEmail] [nvarchar](255) NOT NULL,
[Supplier] [nvarchar](255) NOT NULL,
CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]