Entity Framework CoreでSqlParameterのDbTypeにint64を指定し、ストアドからbigintの値をOutputで取得した場合、int64を指定しているにも関わらずInt32で結果が入ってくるという問題に遭遇しました。DbTypeではなくSqlDbTypeにBigIntを指定することで解消します。
下記は、Selectした結果とOutputパラメーターの両方を取得する例。
下記は、Selectした結果とOutputパラメーターの両方を取得する例。
ストアドプロシージャ
CREATE PROCEDURE [dbo].[spUserSelect]
@Type bigint,
@AllCnt bigint OUTPUT
AS
BEGIN
@Type bigint,
@AllCnt bigint OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT
Id, Name
FROM
[tUser]
WHERE
[Type] = @No;
Id, Name
FROM
[tUser]
WHERE
[Type] = @No;
SELECT
@AllCnt = Count(*)
FROM
[tUser]
WHERE
[Type] = @Type;
@AllCnt = Count(*)
FROM
[tUser]
WHERE
[Type] = @Type;
END
var type = 1;
var paraAllCnt = new SqlParameter()
{
ParameterName = "@AllCnt",
SqlDbType = SqlDbType.BigInt,
Direction = ParameterDirection.Output
};
{
ParameterName = "@AllCnt",
SqlDbType = SqlDbType.BigInt,
Direction = ParameterDirection.Output
};
var userList = dbContext.User
.FromSql("EXECUTE dbo.spUserSelect @Type, @AllCnt OUTPUT",
new SqlParameter("@Type", type),
paraAllCnt).ToList();
.FromSql("EXECUTE dbo.spUserSelect @Type, @AllCnt OUTPUT",
new SqlParameter("@Type", type),
paraAllCnt).ToList();
var allCnt = (long)paraAllCnt.Value;
最近のコメント