我们有一个庞大的EF上下文模型。我只想从一个父表及其子表中批量插入数据。 BulkSaveChanges花费的时间太长,我正在玩BulkInsert,但是当我设置options.IncludeGraph = true
时,它花费的时间甚至更长。有没有一种方法可以防止Dapper搜索所有相关对象,而仅从Parents表和Child中插入数据?
答案 0 :(得分:1)
您可以两次拨打批量插入吗?一个给父母,一个给孩子
public static void main(String[] args) throws Exception {
final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSource<Integer> input = env.fromElements(1, 2, 3);
DataSet<Tuple3<Integer, String, Double>> result = input.map((MapFunction<Integer, Tuple3<Integer, String, Double>>) integer -> Tuple3.of(integer, integer.toString(), 42.0));
Path outputPath = new Path("hdfs:///foobar");
result.output(new MyCsvOutputFormat(outputPath));
env.execute();
}
private static class MyCsvOutputFormat<T extends Tuple> extends CsvOutputFormat<T> {
public MyCsvOutputFormat(Path outputPath) {
super(outputPath);
}
@Override
public void open(int taskNumber, int numTasks) throws IOException {
try (PrintWriter wrt = new PrintWriter(stream)) {
wrt.println("Foo|bar|foobar");
}
super.open(taskNumber, numTasks);
}
}
在插入父母之后,孩子仍然具有ParentId = 0
我们希望很快改进这一部分,但目前,您需要为孩子分配ParentId。
例如:
context.BulkInsert(parents);
context.BulkInsert(parents.SelectMany(x => x.Childs));