Obtención de un error al insertar varias filas a través de Entity Framework 7

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

Pregunta

Tengo una tabla simple y un modelo generado simple para ir junto con él.

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

Cuando intento agregar varias entradas a través del método AddRange (código a continuación), se produce un error 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();

También he intentado usar el método Add:

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

Sin embargo, si guardo cada elemento individual, como a continuación, funciona, pero como puedes imaginar, realmente se ralentiza cuando hay muchas filas:

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

¿Por qué me da un error?

Debo mencionar que estoy usando Entity Framework 7 con asp.net 5 / mvc 6. La versión de Entity Framework 7 es "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"

PS hice un perfil del código y genera el siguiente SQL, que predeciblemente da el mismo error:

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 Esto es contra SQL Server 2005

Respuesta aceptada

SQL Server 2005 no es compatible con Entity Framework 7 (de hecho, SQL Server 2005 ya no es compatible con Microsoft).

Específicamente, la sintaxis de INSERTAR VALORES de varias filas utilizada por EF7 no es compatible, requiere SQL Server 2008 o más reciente.

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

Es posible que pueda evitarlo estableciendo un MaxBatchSize de 1



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué