Estoy usando Dapper para ejecutar la siguiente consulta en una instancia de SQL Server 2008 R2 Express desde una aplicación ASP.NET MVC 3 (.NET 4.0).
INSERT INTO Customers (
Type, Name, Address, ContactName,
ContactNumber, ContactEmail, Supplier)
VALUES (
@Type, @Name, @Address, @ContactName,
@ContactNumber, @ContactEmail, @Supplier)
SELECT @@IDENTITY
La llamada a connection.Query<int>(sql, ...)
está lanzando una excepción de lanzamiento no válida. Lo he depurado y es en el punto donde Dapper llama GetValue
al devuelto SqlDataReader
.
El tipo de retorno de GetValue
es Object
, inspeccionándolo en el programa del depurador, es un decimal en caja.
Si cambio la selección a SELECT CAST(@@IDENTITY as int)
, el retorno de GetValue es un int en caja y la excepción no se produce.
La columna Id es definitivamente del tipo int; ¿Por qué SELECT @@IDENTITY
devolvería un decimal?
Alguna información adicional:
- La base de datos es completamente nueva.
- La tabla Clientes es el único objeto que le he agregado. No hay otras tablas (vistas), vistas, disparadores o procedimientos almacenados en la base de datos.
- Hay 10 filas en la base de datos, las Id son 1,2,3,4,5,6,7,8,9,10 (es decir, la columna no está más allá de los límites de un int).
La definición de mi tabla es
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]