asp.net-core - NET Core 的 Dapper : Insert into a table and return id of inserted row

标签 asp.net-core dapper

我的存储库中有以下方法。到目前为止,我相信返回的 int 只是一个指示操作是否成功的整数。我希望 int 是成功执行后要返回的 id(这是表的单列)。我如何做到这一点?

    public async Task<int> AddNewGroup()
    {
        using(_connection)
        {
            _connection.Open();
            var id = await _connection.ExecuteAsync("INSERT INTO groups").Single();
        }
    }

最佳答案

您可以运行包含 2 个部分的查询,第一个是您的 INSERT 部分,第二个是 SELECT 部分。在 SELECT 部分,您可以返回(选择)您想要的任何列值。

例如,如果您的组表有一个名为 GroupId 的主键列,并且您已将该列设置为标识值生成(自动值生成),则可以调用 SCOPE_IDENTITY() 来获取生成的值。

我们将使用QueryAsync方法。

public async Task<int> AddNewGroup()
{
   using(_connection)
   {
      _connection.Open();
      var q = @"INSERT INTO Groups(Name,Description) VALUES
                 (@name, @desc); SELECT CAST(SCOPE_IDENTITY() as int)"
      var result = await _connection.QueryAsync<int>(q, 
                                          new { @name="some name", @desc="some desc"});
      return result.Single();
   }
}

关于asp.net-core - NET Core 的 Dapper : Insert into a table and return id of inserted row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50650985/

相关文章:

c# - Hangfire - Multi-Tenancy ,ASP.NET Core - 解析正确的租户

c# - asp.net core 1 appsettings.production.json 不更新连接字符串

c# - 将 httpHandler 附加到 httpclientFactory webapi aspnetcore 2.1

c# - 发送 SqlParameter 给 Dapper

C# Dapper QueryAsync 到 ValueTuple 映射不正确

c# - 如何在 .net core 中使用 JwtSecurityTokenHandler 和 Compression DEFLATE 生成/验证 JWT token

c# - 什么限制了 .NET Core 2.2 中 HTTPS 的端口范围?

c# - 在 Postgres 中使用 IEnumerable 参数进行 IN 查询的 Dapper AddDynamicParams

c# - 如何在小巧玲珑中返回原始数据类型的元组

c# - 小巧玲珑/SQL 服务器 : passing TVP to stored procedure with needed fields only