Ottenere un errore quando si inseriscono più righe tramite Entity Framework 7

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

Domanda

Ho una semplice tabella e un semplice modello generato per andare avanti con esso.

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

Quando tento di aggiungere più voci tramite il metodo AddRange (codice di seguito), provoca un errore 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();

Ho anche provato a utilizzare il metodo Aggiungi:

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

Tuttavia, se salvi ogni singolo oggetto, come sotto, funziona, ma come puoi immaginare, rallenta molto quando ci sono molte righe:

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();

Perché ricevo un errore?

Devo dire che sto utilizzando Entity Framework 7 con asp.net 5 / mvc 6. La versione di Entity Framework 7 è "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"

PS Ho profilato il codice e genera il seguente SQL, che fornisce in modo prevedibile lo stesso errore:

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 Questo è contro SQL Server 2005

Risposta accettata

SQL Server 2005 non è supportato da Entity Framework 7 (infatti SQL Server 2005 non è più supportato da Microsoft).

In particolare, la sintassi INSERT VALUES a più righe utilizzata da EF7 non è supportata, richiede SQL Server 2008 o versione successiva.

Vedi https://github.com/aspnet/EntityFramework/issues/3691

Potresti riuscire a ovviare impostando un MaxBatchSize di 1



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché