使用 Entity Framework 6 Code First 迁移时,我需要向数据库添加一个新表,然后向现有表(其中包含大量数据)中的新表添加外键。
由于现有表中已经有大量数据,并且新表的 FK 将不为 NULL,因此我需要能够向新表添加一行,然后从中添加键(身份)在将其设置为 NOT NULL 之前,将其添加到“旧”表中的所有现有行。
有没有办法在代码中执行此操作,以便每次使用 Update-Database 命令时都会执行此操作,或者我是否必须手动更改生成的 SQL 脚本?
现有表/类被命名为:证书 新表/类命名为:CertificateRegistry 关系是CertificateRegistry(One)-->Certificate(many)。 证书中的新列将是作为 NOT NULL 外键的 CertificateRegistryId。
澄清一下:表和关系的创建不是问题,但是我如何通过代码向新表添加一行,然后使用生成的标识更新旧表中的现有行。
我试图寻找这个问题的答案,但没有成功,所以如果您认为这是重复的,请发布答案的链接。
最佳答案
您必须将新的外键创建为可为空的列,然后运行 sql 来更新值,然后将该列更改为不可为空。
使用不可为空的键创建模型 -> Add-Migration -> 通过将可空值从 true 更改为 false 来更改 AddColumn
语句 -> 添加你的 Sql("")
-> 添加 AlterColumn
语句
迁移中的代码应包含如下内容:
AddColumn("dbo.Foos", "NewForeignKey", c => c.Int(nullable: true));
Sql("Update dbo.Foos set NewForeignKey = ...");
AlterColumn("dbo.Foos", "NewForeignKey", c => c.Int(nullable: false));
关于sql-server - 如何使用 Entity Framework 6 Code First 迁移创建初始数据行并将其添加到新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28879042/