IDENTITY_INSERT设置为OFF时,EF无法为表'X'中的标识列插入显式值

时间:2018-11-25 04:30:22

标签: c# entity-framework ef-database-first identity-insert

我必须将数据从一个数据库迁移到另一个数据库。密钥应保留。 我正在将EF与自动生成的.dbmx文件一起使用。我已经阅读了许多类似问题的答案,并遵循以下建议:在插入条目之前,我确实将IDENTITY_INSERT设置为ON;在数据库图上,我将StoreGeneratedPattern列上的None更改为Id(也尝试通过向Id属性中添加相应的属性来做到这一点)。

这是我的代码:

var myEntity = new MyTable
{
    Id = 12345,
    Name = "Lorem ipsum",
    BrandId = brandId,      
};

MyContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT MY_TABLE_NAME ON");
MyContext.MyTable.Add(myEntity);
await MyContext.SaveChangesAsync(); //getting error here

在Management Studio中执行此操作时,效果很好。该问题仅在使用实体框架时出现。

我在SQL Server Profiler中看到执行INSERT_IDENTITY命令并插入Id列附带的SQL,但看起来似乎没有执行,这看起来很奇怪。当我复制粘贴此SQL查询时,它工作正常。

1 个答案:

答案 0 :(得分:1)

问题在于,当您从数据库生成架构并且不进行更改时,EDMX是并且Designer.cs文件是在编译之前生成的。针对那些文件中的内容运行验证。他们希望启用identify_insert属性,因此当您在数据库中以编程方式禁用它时,EF层将引发您遇到的异常。基本上说-您的数据库与我的数据库不匹配。

老实说,用这种方法进行大表数据传输并不是EF的目的。您应该使用Bulk Data Copy