スポンサーリンク
犬診断(いぬのきもち)
スポンサーリンク

EFCoreで実行したストアドのOutputパラメータを取得する

C#
Entity Framework CoreでSqlParameterのDbTypeにint64を指定し、ストアドからbigintの値をOutputで取得した場合、int64を指定しているにも関わらずInt32で結果が入ってくるという問題に遭遇しました。DbTypeではなくSqlDbTypeにBigIntを指定することで解消します。
下記は、Selectした結果とOutputパラメーターの両方を取得する例。
 
ストアドプロシージャ
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#

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;

コメント

スポンサーリンク
e87.com(千趣会イイハナ)
スポンサーリンク
明日を、もっと、ハッピーに!『ショップジャパン』
タイトルとURLをコピーしました