C# 返回插入的项目';从Dapper/PostgreSQL返回UUID

C# 返回插入的项目';从Dapper/PostgreSQL返回UUID,c#,postgresql,asp.net-core,dapper,C#,Postgresql,Asp.net Core,Dapper,在我的ASP.Net Core 2.1 Web API项目中有一个这样的模型对象: public class Tenant { public Guid Id { get; set; } public string Name { get; set; } } 我在postgres中执行插入操作,如下所示: public async Task<int> CreateItem(Tenant item) { return await db.ExecuteAsync($

在我的ASP.Net Core 2.1 Web API项目中有一个这样的模型对象:

public class Tenant
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}
我在postgres中执行插入操作,如下所示:

public async Task<int> CreateItem(Tenant item)
{
    return await db.ExecuteAsync($@"INSERT INTO tenants (Name) VALUES (@Name)", item);
}
public异步任务CreateItem(租户项)
{
return wait db.ExecuteAsync($@“插入租户(名称)值(@Name)”,项);
}
我需要返回Guid,以驱动后续逻辑。它返回affectedrows(1)。我的研究显示了一些用于获取自动增量ID的技巧(比如使用“MAX”等等)


有没有办法做到这一点,最好是通过简洁的方式?或者我需要返回ADO.Net吗?

您应该能够使用INSERT语句的RETURNING子句让Postgres返回插入的id。

public异步任务CreateItem(租户项)
{
return wait db.ExecuteScalarAsync($@“插入租户(名称)值(@Name)返回Id)”,项);
}

如何填充记录的Guid值?是什么阻止您使用
Guid.NewGuid()在代码中生成Id?作为参考,允许数据库生成它们。不管是真是假,我在不止一个地方读到过,在DB之外生成它们会导致罕见但恼人的冲突。这非常有效!谢谢你的帮助,我没有遇到ExecuteScalarAsync方法。
public async Task<Guid> CreateItem(Tenant item)
{
    return await db.ExecuteScalarAsync<Guid>($@"INSERT INTO tenants (Name) VALUES (@Name) RETURNING Id", item);
}