我一直在评估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 );