使用原始 SQL 使用 Entity Framework 在 postgresql 中插入列表

Use raw SQL to insert a list in postgresql using Entity Framework

我想使用 Entity Framework.

将数据列表插入 Postgresql 中的 table

任何人都可以通过建议语法或算法来提供帮助吗?

就像@Nick 所说的那样,原始 sql 并不理想,尤其是当您插入 100k 值时,大量的选项涉及到批量插入时我特别使用 BulkInsert 在下面的示例中发现它更容易

 using (var dbContextTransaction = _Context.Database.BeginTransaction())
            {
                try
                {
                    //bulk insert list of user objects in users table
                    _Context.BulkInsert(list_of_users, options =>
                    {
                        options.InsertIfNotExists = true
                        options.ColumnPrimaryKeyExpression = x => new{x.id};

                    });
                    dbContextTransaction.Commit();
                    
                }
                catch (Exception ex)
                {
                    dbContextTransaction.Rollback();
                    throw;

                }
            }

但如果您坚持构建原始 sql 查询并执行它的硬路线,我会这样做,我会将列表分成 10k 个批次以避免内存问题

var insert_query = "INSERT INTO TABLE (Column_1,Column_2,Column_3)VALUES";
int count=0;

            foreach (var obj in list_data)
            {
               var size = count + 1;
                if(count is 0)
                    insert_query += $"({obj.param1},{obj.param2},{obj.param3})";
                else 
                    insert_query += $",({obj.param1},{obj.param2},{obj.param3)";

                
                if(size.Equals(data.Count()))
                    insert_query += ";";

              count++;
            }
            int rows_affected = _Context.Database.ExecuteSqlRaw(insert_query);