Dapper多个插入记录并返回标识

use*_*571 11 dapper

我一直在评估Dapper取代我们一直在使用的EF6.

其中一个用例涉及在表中插入多个记录,我们需要返回标识列和另一个DB set datetime列.

为了说明 - 考虑表

Create Table Demo
(
   Id int indentity(1,1) PRIMARY KEY,
   Name VARCHAR(10),
   WhenCreated DATETIME DEFAULT(GETDATE())
)
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Connection.Execute插入多个记录 - 但这不会返回我Id,Whencreated列.

var connection = new SqlConnection();
var names = new []{ {Name = "Name1"}, {Name = "Name2"}};
connection.Execute("Insert into Demo(Name) values(@Name)", names ); 
Run Code Online (Sandbox Code Playgroud)

要返回身份数据,我可以使用Connection.Query

var connection = new SqlConnection();
var demo = connection.Query<Demo>(
     @"Insert into Demo(Name) values(@Name); 
       Select * from Demo Where Id = Scope_IDENTITY();", 
     new {Name = "Name1"} ); 
Run Code Online (Sandbox Code Playgroud)

但这只能一次完成一条记录 - 即每条记录是一次往返服务器,这是不可行的.


本质上我正在寻找方法(这不起作用 - 因为Query不接受/映射集合) - 即在一个服务器行程中插入多个记录并返回所有插入行的标识(或实际上任何其他列)

var connection = new SqlConnection();
var names = new []{ {Name = "Name1"}, {Name = "Name2"}};
var demo = connection.Query<Demo>(
     @"Declare @Inserted Table (Id int);
       Insert into Demo(Name) OUTPUT Inserted.Id into @Inserted
                values(@Name); 
       Select * from @Inserted",
     names ); 
Run Code Online (Sandbox Code Playgroud)