Asp.net core NET Core的Dapper:插入到表中并返回插入行的id
我的存储库中有以下方法。到目前为止,我相信返回的int只是一个指示操作是否成功的int。我希望int是成功执行后返回的表的单个列的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
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 });
}
}
}