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)
没有机制可以通过任何常规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,DateTaradod和DailyTaradods,你可以指定明确的bcp.ColumnMappings来调整插入的行为.
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |