【发布时间】:2025-12-15 06:45:01
【问题描述】:
我有一个长度未知的字符串列表。 我正在将它们添加到数据库中:
if (somenteNovasClas.Any()) {
foreach (string item in wsClassificacoes) {
dc.Classificacaos.Add(new Classificacao { Descricao = item });
}
dc.SaveChanges();
}
但 EF 会为每一行生成一个INSERT:
exec sp_executesql N'insert [dbo].[Classificacao]([Descricao], [Excluido])
values (@0, @1)
select [CodClassificacao]
from [dbo].[Classificacao]
where @@ROWCOUNT > 0 and [CodClassificacao] = scope_identity()',N'@0 varchar(255),@1 bit',@0='Mercado',@1=0
go
exec sp_executesql N'insert [dbo].[Classificacao]([Descricao], [Excluido])
values (@0, @1)
select [CodClassificacao]
from [dbo].[Classificacao]
where @@ROWCOUNT > 0 and [CodClassificacao] = scope_identity()',N'@0 varchar(255),@1 bit',@0='Concorrência',@1=0
go
我想知道如何一次性插入 EF 将生成如下命令:
INSERT INTO Table (column)
VALUES ([array[0]]), ([array[1]]), ...
而不是一个插入foreach.. 有什么想法吗?
【问题讨论】:
-
你怎么知道 EF 为每一行生成一个插入?
-
很公平。请显示您的 C# 代码。我怀疑您没有按照 MSFT 的意图编写它。我很确定 EF 可以进行批量插入。
-
我不确定您要达到的目标。除非您从 SqlBulkCopy 或外部数据源批量插入,否则这是 AFAIK 完成的唯一方法,而且您这样做的方式仍然非常快。
-
EF 永远不会使用所谓的行构造函数生成 sql 语句。这不是它的功能之一。
标签: c# .net linq entity-framework