使用C#使用Dapper Plus进行批量插入的最快方法

时间:2018-11-06 13:26:55

标签: c# oracle

我正在寻找使用Dapper Plus进行批量插入的最快方法。 我一直在环顾四周,在此站点或Dapper Plus网站上都找不到任何答案。

现在我正在使用类似的东西:

DapperPlusManager.Entity<T_PARENT>().Table("T_PARENT")
 .Identity(c => c.PK)
 .AfterAction((kind, parent) =>
  {
    if(kind == DapperPlusActionKind.Insert)
     {
       parent.T_CHILDREN.ToList().ForEach(child => child.FK = parent.PK); 
     }
  }

然后

Connection
 .BulkInsert<T_PARENT>(Parents)
 .ThenBulkInsert(c => c.T_CHILDREN);

DbTransaction Trans = Connection.BeginTransaction();
Trans
 .BulkInsert<T_PARENT>(Parents)
 .ThenBulkInsert(c => c.T_CHILDREN);
Trans.Commit();

虽然有效,但插入大量复杂对象时速度却很慢。

在我的情况下,我们总共向数据库中插入了10万个对象,使用这种方法大约需要60秒才能完成。

有没有一种方法可以更快地执行此操作?

编辑:

我应该提到我正在使用Oracle 11g数据库。 我还应该提到,除了使用Entity Framework和Dapper Plus之外,我别无选择。

编辑: 在我的测试案例中,我基本上有两种情况:

案例1:对于我们插入的每个T_PARENT,我们也会插入数千个T_CHILD。

情况2:对于我们插入的每个T_CHILD,我们只插入几个T_CHILD(少于10个)。

在情况1中,操作相当快(大约10s),但情况2则相对较慢(大约30s)。

原因似乎很明显,如情况1所示,对T_PARENT的操作次数比情况2少得多。

0 个答案:

没有答案