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

A. *_*nce 3 c# database entity-framework entity-framework-core efcore.bulkextensions

我用来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);
            }
Run Code Online (Sandbox Code Playgroud)

这是相关的上下文代码:

    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;
        }
        // . . .
    }
Run Code Online (Sandbox Code Playgroud)

以下连接字符串是从设置传入的: Data Source=localhost;Integrated Security=True;TrustServerCertificate=True;ApplicationIntent=ReadWrite;Initial Catalog=Records

Lac*_*tah 6

该方法应该做一些事情 - 如果你等待它。

因此,不要: db.BulkInsertAsync(records); 做: await db.BulkInsertAsync(records);

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