如何使用Entity Framework 6 Code First迁移创建初始数据行并将其添加到新表

时间:2015-03-05 13:32:59

标签: sql-server entity-framework code-first ef-migrations

使用Entity Framework 6 Code First迁移,我需要向数据库添加一个新表,然后在现有表中添加一个外键(包含大量数据)。

由于现有表中已经包含大量数据,并且新表的FK将为NOT NULL,我需要能够向新表中添加一行,然后从中添加一个键(标识)排到" old"中的所有现有行表之前它是NOT NULL。

有没有办法在代码中执行此操作,以便每次使用Update-Database命令时执行此操作,或者是否必须手动更改生成的SQL脚本?

现有的表/类名为:Certificate 新表/类名为:CertificateRegistry 关系是CertificateRegistry(一) - >证书(很多)。 Certificate中的新列将是CertificateRegistryId,作为NOT NULL外键。

澄清一下:表和关系的创建不是问题,但我如何通过代码可以向新表添加一行,然后使用生成的标识更新旧表中的现有行。

我试图在没有运气的情况下搜索答案,所以如果您认为这是重复的,请发布答案的链接。

1 个答案:

答案 0 :(得分:2)

您必须将新外键创建为可为空的列,然后运行sql以更新值,然后将列更改为不可为空。

使用不可为空的密钥创建模型 - >添加迁移 - >通过将nullable从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));