使用原始 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);
我想使用 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);