首页 > 解决方案 > 返回 EF Core Database.ExecuteSqlInterpolatedAsync 的存储过程值

问题描述

我有这个 C# 方法,它调用执行插入语句的有效存储过程。如何在插入语句后取回身份(主键)。

public async Task AddFileFolderStructure(int id, string folderName, string folderType)
{
    var sproc_cmd = "dbo.AddFileFolderStructure";
    await Database.ExecuteSqlInterpolatedAsync($"{sproc_cmd} {id}, {folderName}, {folderType}");
}

这是我修改后的存储过程

ALTER PROCEDURE [dbo].[AddFileFolderStructure]
    (@ParentId INT, 
     @FolderName VARCHAR(255), 
     @FolderType VARCHAR(255),
     @id int OUTPUT)
AS
BEGIN
    INSERT INTO [FileFolders] 
    VALUES (@ParentId, @FolderName, @FolderType)

    SELECT @id = SCOPE_IDENTITY();

    RETURN @id
END

标签: c#

解决方案


我没有对此进行测试,但它应该可以工作:

var output = new SqlParameter();
output.ParameterName = "@Id";
output.SqlDbType = SqlDbType.Int;
output.Direction = ParameterDirection.Output;

await Database.ExecuteSqlInterpolatedAsync("EXEC {0} @param1={1} OUT,@param2={2}, @param3={3} " sproc_cmd,output,folderName,folderType);

推荐阅读