Asp.net core NET Core的Dapper:插入到表中并返回插入行的id

Asp.net core NET Core的Dapper:插入到表中并返回插入行的id,asp.net-core,dapper,Asp.net Core,Dapper,我的存储库中有以下方法。到目前为止,我相信返回的int只是一个指示操作是否成功的int。我希望int是成功执行后返回的表的单个列的id。我如何做到这一点 public async Task<int> AddNewGroup() { using(_connection) { _connection.Open(); var id = await _connection.ExecuteAsync

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

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

如果您使用的是SQLAzure/SQLServer,则需要使用以下命令从查询中返回插入的值

INSERT INTO groups OUTPUT inserted.id VALUES (...)
然后使用ExecuteAsync代替ExecuteScalarAsync

此处引用OUTPUT子句:

您可以运行一个包含两部分的查询,第一部分是插入部分,第二部分是选择部分。在“选择”部分中,可以返回选择所需的任何列值

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

我们将使用QueryAsync方法


您不必手动创建插入查询,您可以使用Dapper.Contrib来帮助您管理CRUD操作

使用Dapper.Contrib,您可以执行以下操作:

 public async Task<int> AddNewGroup(Group entity)
 {
        using (_connection)
        {
             _connection.Open();
             var id = await _connection.InsertAsync(entity);
         }
 }

是关于MS Access的,但其他内容仍然相同。当标识列是GUID而不是自动递增int时,您知道解决方案吗?Dapper.Contrib似乎只有返回int或long的Insert方法,但是,如果希望获得Guid作为插入结果,可以使用_connection.QueryFirstAsyncrawSql创建自己的插入方法,其中rawSql是带有输出的插入语句。例如,rawSql=插入用户id、用户名、firstname、lastname输出。id值newid、'rajiv'、'raj'、'iv'。您还可以使用输出来获取整个插入行。仅代码的答案是低质量的答案。
 public async Task<int> AddNewGroup(Group entity)
 {
        using (_connection)
        {
             _connection.Open();
             var id = await _connection.InsertAsync(entity);
         }
 }
    public static void Main()
    {
        string sql = @"INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country) 
        Values (@CustomerName, @ContactName, @Address, @City, @PostalCode, @Country);
        SELECT CustomerID FROM Customers WHERE CustomerID = SCOPE_IDENTITY();";

        using (var connection = new SqlConnection(GetConnectionString()))
        {
            Customer c = new Customer("Brian Adams", "Brian", "12 Jones Place", "New York", "NY12", "CA");
                            
            var id = connection.QueryFirstOrDefault<int>(sql, c);
            
            Console.WriteLine("The Customer ID is " + id);
            sql = "Select * FROM CUSTOMERS WHERE CustomerID = @ID";
            
            var rc = connection.QueryFirstOrDefault<Customer>(sql, new{ @ID = id });
        }
    }
}