我必须将数据从一个数据库迁移到另一个数据库。密钥应保留。
我正在将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查询时,它工作正常。
答案 0 :(得分:1)
问题在于,当您从数据库生成架构并且不进行更改时,EDMX是并且Designer.cs文件是在编译之前生成的。针对那些文件中的内容运行验证。他们希望启用identify_insert属性,因此当您在数据库中以编程方式禁用它时,EF层将引发您遇到的异常。基本上说-您的数据库与我的数据库不匹配。
老实说,用这种方法进行大表数据传输并不是EF的目的。您应该使用Bulk Data Copy