我正在寻找使用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少得多。