c# - 当 IDENTITY_INSERT 设置为 OFF 时,EF 无法为表“X”中的标识列插入显式值
问题描述
我必须将数据从一个数据库迁移到另一个数据库。应保留密钥。我将 EF 与自动生成的.dbmx
文件一起使用。我已经阅读了许多类似问题的答案并遵循了这些建议:我确实IDENTITY_INSERT
在插入条目之前完全打开;在数据库图上,我将列更改StoreGeneratedPattern
为None
on 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
执行命令并且插入 SQL 带有Id
列,但似乎没有执行,这看起来很奇怪。当我复制粘贴此 SQL 查询时,它工作得很好。
解决方案
问题是 EDMX 和 Designer.cs 文件是在您编译之前生成的,当您从数据库生成架构并且不更改时。验证是针对那些文件中的内容运行的。他们希望启用 identify_insert 属性,因此当您在数据库中以编程方式禁用它时,EF 层会抛出您遇到的异常。基本上说-您的数据库与我的数据库不匹配。
老实说,以这种方式进行大表数据传输并不是 EF 的设计目的。您应该使用批量数据复制
推荐阅读
- c# - 带有后端.net核心的Nginx反向代理使用signalR
- string - 拆分字符串并将子字符串保存在 dart 的列表中
- c++ - 如何使用 C++ 在 matlab 中实现 unique 的行为?
- python - 是否可以在另一个脚本中调用函数?(Python)
- python - 如何通过 Python 读取和匹配在线 XML 文件中的某些值?
- c# - 在下拉列表的对象中使用 Databind() 时出错
- flutter - 未处理的异常:FileSystemException
- python-3.x - AttributeError:“builtin_function_or_method”对象没有属性“数据”
- file - 在 Codeigniter 3 中上传多张图片重命名文件
- kubernetes - 无效的主机。要浏览 Nexus,请单击此处/。要使用 Docker 注册表,请在访问 kubernetes 中的 nexus 时将您的客户端指向