Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过实体框架7插入多行时出错_C#_Entity Framework_Asp.net Core Mvc_Entity Framework Core - Fatal编程技术网

C# 通过实体框架7插入多行时出错

C# 通过实体框架7插入多行时出错,c#,entity-framework,asp.net-core-mvc,entity-framework-core,C#,Entity Framework,Asp.net Core Mvc,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方法(下面的代码)添加多个条目时,会导致“,”附近出现错误语法错误。 var admins = n

我有一个简单的表和一个简单的生成模型

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方法(下面的代码)添加多个条目时,会导致“,”附近出现错误
语法错误。

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

ctx.Admin.AddRange(admins);
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();
为什么我会出错

我应该提到,我正在使用EntityFramework7和asp.NET5/MVC6。实体框架7的版本是“EntityFramework.MicrosoftSqlServer”:“7.0.0-rc1-final”

p.S.我分析了代码,它生成了以下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'

p.p.S这是针对SQL Server 2005的

实体框架7不支持SQL Server 2005(事实上,Microsoft不再支持SQL Server 2005)

具体而言,EF7使用的多行插入值语法不受支持,它需要SQL Server 2008或更高版本


您可以通过将MaxBatchSize设置为1来解决此问题。Entity Framework 7不支持SQL Server 2005(事实上,Microsoft不再支持SQL Server 2005)

具体而言,EF7使用的多行插入值语法不受支持,它需要SQL Server 2008或更高版本


您可以通过将MaxBatchSize设置为1来解决此问题。我的意思是,根据您的描述,当它发送一批insert命令时,似乎存在错误。可能就这么简单。您能获取它为
.SaveChanges
调用生成的SQL吗?您能发布完整错误吗?您使用的是SQL Server 2005吗?我建议您将创建的SQL管道化,以便您可以独立于实体框架对其进行测试,以查看问题所在。@ErikEJ是的,SQL Server 2005。这是一个问题吗?我的意思是,根据你的描述,当它发送一批插入命令时,似乎有一个bug。可能就这么简单。您能获取它为
.SaveChanges
调用生成的SQL吗?您能发布完整错误吗?您使用的是SQL Server 2005吗?我建议您将创建的SQL管道化,以便您可以独立于实体框架对其进行测试,以查看问题所在。@ErikEJ是的,SQL Server 2005。这是一个问题吗?我刚刚将数据库移动到Sql2012,它工作得很好。谢谢。我刚刚将数据库移到Sql2012,它运行得很好。非常感谢。
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'