Entity Framework CoreでSqlParameterのDbTypeにint64を指定し、ストアドからbigintの値をOutputで取得した場合、int64を指定しているにも関わらずInt32で結果が入ってくるという問題に遭遇しました。DbTypeではなくSqlDbTypeにBigIntを指定することで解消します。
下記は、Selectした結果とOutputパラメーターの両方を取得する例。
ストアドプロシージャ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
CREATE PROCEDURE [dbo].[spUserSelect] @Type bigint, @AllCnt bigint OUTPUT AS BEGIN SET NOCOUNT ON; SELECT Id, Name FROM [tUser] WHERE [Type] = @No; SELECT @AllCnt = Count(*) FROM [tUser] WHERE [Type] = @Type; END |
C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var type = 1; var paraAllCnt = new SqlParameter() { 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(); var allCnt = (long)paraAllCnt.Value; |
コメント