如何使用精巧的orm执行批量操作?

zah*_*adi 3 orm batch-file bulk dapper

我在项目中有dapper orm,我在数据库中保存了数据(1200000row),但在与dapper的事务中,我想要fast.with nhibernate(session statetless)很慢.我认为短小精悍是快速的,因为获取数据(700000)与nhibernate在33秒,与9秒的精巧.

怎么解决问题?

我的代码是:

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

Mar*_*ell 5

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

对于你想要的,听起来你应该使用SqlBulkCopy.这支持交易,你可以FastMember在这里帮忙; 例如:

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);
}
Run Code Online (Sandbox Code Playgroud)

它还支持外部事务,但如果您要"创建tran,push,commit tran",您也可以使用内部事务.

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

注意:如果表中有超过列Id,PersonId,DateTaradodDailyTaradods,你可以指定明确的bcp.ColumnMappings来调整插入的行为.