通過Entity Framework 7插入多行時出錯

asp.net-core-mvc c# entity-framework entity-framework-core

我有一個簡單的表和一個簡單的生成模型。

CREATE TABLE dbo.Admin (
     Id int IDENTITY(1, 1) NOT NULL
    ,DomainLogin nvarchar(50) NOT NULL
    ,CONSTRAINT PK_Admin PRIMARY KEY CLUSTERED (DomainLogin ASC)
)

當我嘗試通過AddRange方法(下面的代碼)添加多個條目時,它會導致錯誤Incorrect syntax near ','.

var admins = new List<Admin>()
{
    new Admin() {DomainLogin = "zzz1"},
    new Admin() {DomainLogin = "zzz2"},
    new Admin() {DomainLogin = "zzz3"}
};

ctx.Admin.AddRange(admins);
ctx.SaveChanges();

我也嘗試過使用Add方法:

ctx.Admin.Add(new Admin() {DomainLogin = "zzz1"});
ctx.Admin.Add(new Admin() {DomainLogin = "zzz2"});
ctx.Admin.Add(new Admin() {DomainLogin = "zzz3"});
ctx.SaveChanges();

但是,如果我保存每個單獨的項目,如下所示,它可以工作,但是你可以想像,當有很多行時它真的會變慢:

ctx.Admin.Add(new Admin() {DomainLogin = "zzz1"});
ctx.SaveChanges();
ctx.Admin.Add(new Admin() {DomainLogin = "zzz2"});
ctx.SaveChanges();
ctx.Admin.Add(new Admin() {DomainLogin = "zzz3"});
ctx.SaveChanges();

為什麼我收到錯誤?

我應該提到我正在使用asp.net 5 / mvc 6的實體框架7.實體框架7的版本是"EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"

PS我分析了代碼,它生成了以下SQL,可預測地給出了相同的錯誤:

exec sp_executesql N'SET NOCOUNT OFF;
INSERT INTO [Admin] ([DomainLogin])
OUTPUT INSERTED.[Id]
VALUES (@p0),
(@p1),
(@p2);
',N'@p0 nvarchar(4000),@p1 nvarchar(4000),@p2 nvarchar(4000)',@p0=N'zzz1',@p1=N'zzz2',@p2=N'zzz3'

PPS這是針對SQL Server 2005的

一般承認的答案

實體框架7不支持SQL Server 2005(事實上,Microsoft不再支持SQL Server 2005)。

具體來說,不支持EF7使用的多行INSERT VALUES語法,它需要SQL Server 2008或更高版本。

請參閱https://github.com/aspnet/EntityFramework/issues/3691

您可以通過將MaxBatchSize設置為1來解決此問題



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow