如何使用dapper orm执行批处理操作?

如何使用dapper orm执行批处理操作?,orm,batch-file,dapper,bulk,Orm,Batch File,Dapper,Bulk,我在项目中使用了dapper orm,我在数据库中保存了大量数据(1200000行),但在使用dapper的事务中,速度非常慢,我希望使用fast。使用nhibernate(会话无状态)的速度非常慢。 我认为dapper很快,因为使用nhibernate在33秒内获取数据(700000)比使用dapper在9秒内获取数据快 这个问题是如何解决的 我的代码是: IDbTransaction trans = connection.BeginTransaction(); connection.Exec

我在项目中使用了dapper orm,我在数据库中保存了大量数据(1200000行),但在使用dapper的事务中,速度非常慢,我希望使用fast。使用nhibernate(会话无状态)的速度非常慢。 我认为dapper很快,因为使用nhibernate在33秒内获取数据(700000)比使用dapper在9秒内获取数据快

这个问题是如何解决的

我的代码是:

IDbTransaction trans = connection.BeginTransaction();
connection.Execute(@"
    insert DailyResult(Id, PersonId,DateTaradod,DailyTaradods)
    values(@Id, @PersonId,@DateTaradod,@DailyTaradods)", entity, trans);                                    
trans.Commit();

没有任何机制可以通过任何常规ADO.NET API在事务中即时插入1200000行。这根本不是API的意图

对于您想要的,听起来您应该使用
SqlBulkCopy
。这支持事务,您可以在此使用帮助;例如:

IEnumerable<YourEntity> source = ...
using(var bcp = new SqlBulkCopy(
    connection, SqlBulkCopyOptions.UseInternalTransaction))
using(var reader = ObjectReader.Create(source,
         "Id", "PersonId", "DateTaradod", "DailyTaradods"))
{
    bcp.DestinationTableName = "DailyResult";
    bcp.WriteToServer(reader);
}
IEnumerable源=。。。
使用(var bcp=new SqlBulkCopy(
连接,SqlBulkCopyOptions.UseInternalTransaction)
使用(var reader=ObjectReader.Create)(源、,
“Id”、“PersonId”、“DateTaradod”、“DailyTaradods”))
{
bcp.DestinationTableName=“DailyResult”;
bcp.WriteToServer(读卡器);
}
它还支持外部事务,但是如果您要“创建事务、推送事务、提交事务”,那么您最好使用内部事务

如果您不想使用
SqlBulkCopy
,也可以查看表值参数方法,但在处理此卷时,
SqlBulkCopy
将是我推荐的API


注意:如果表中的列数超过
Id
PersonId
DateTaradod
dailydards
,您可以指定显式
bcp.ColumnMappings
来调整插入的行为。

非常感谢mouch。但是使用sqlbulk我的项目依赖数据库sqlserver我希望我的项目在oracle@Zahrahmadi中运行,如果只有一个。。。