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

时间:2015-08-21 15:16:18

标签: dapper

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

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

为了说明 - 考虑表

Create Table Demo
(
   Id int indentity(1,1) PRIMARY KEY,
   Name VARCHAR(10),
   WhenCreated DATETIME DEFAULT(GETDATE())
)

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

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

要返回身份数据,我可以使用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"} ); 

但这一次只能对一条记录进行 - 即每条记录都是一次往返服务器,这是不可行的。

基本上我正在寻找方法(这不起作用 - 因为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 ); 

0 个答案:

没有答案