gpt4 book ai didi

c# - EFCore.BulkExtensions 中的 BulkInsertAsync 似乎没有插入任何内容

转载 作者:行者123 更新时间:2023-12-02 02:23:44 28 4
gpt4 key购买 nike

我正在使用 EFCore.BulkExtensions 将最多 100,000 条记录批量插入数据库。

我的问题是,由于某种原因,BulkInsertAsync 不会向数据库插入任何记录。我知道这是一个异步调用,但我等了半个小时,没有插入数据。常规的同步 BulkInsert 调用可以工作,但效果极差,因为它占用了大量的处理时间。

有谁知道为什么 BulkInsertAsync 在此上下文中不起作用,而 BulkInsert 却可以?

以下是相关代码,它将二进制数据(从另一台机器传输的)编码到 C 结构中,将该 C 结构添加到列表中,然后将该列表批量插入到数据库中。

            IList<object> records = new List<object>();
using (var db = new RecordContext())
{
// keep going until we process all the data; numRecs is at most 100,000
for (int i = 0; i < numRecs; i++)
{
// marshal the data into the struct and map it to its database struct
var tempStruct = Marshal.PtrToStructure<T>(dataPtr);
records.Add(tempStruct);
dataPtr += Marshal.SizeOf<T>();
}
db.BulkInsertAsync(records);
}

这是相关的上下文代码:

    public class RecordContext : DbContext
{
public RecordContext() : base(GetOptions())
{
// disable change tracking for performance
ChangeTracker.AutoDetectChangesEnabled = false;
}

private static DbContextOptions GetOptions()
{
return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), new Settings().recordsConnectionString).Options;
}
// . . .
}

以下连接字符串是从设置中传入的:数据源=localhost;集成安全性=True;TrustServerCertificate=True;ApplicationIntent=ReadWrite;初始目录=记录

最佳答案

该方法应该执行某些操作 - 如果您等待它。

所以代替:db.BulkInsertAsync(记录);做:等待 db.BulkInsertAsync(records);

本质上,你告诉它执行一个异步任务,然后你通过不调用await退出了创建/拥有该任务的方法,导致该任务被放弃。异步任务有一些微妙的魔力,哈哈。

关于c# - EFCore.BulkExtensions 中的 BulkInsertAsync 似乎没有插入任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66030123/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com