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

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

使用 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/

相关文章:

sql-server - 如何优化 T-SQL 存储过程以搜索源表并将新记录插入目标表

python - 使用 sqlAlchemy 存储过程

node.js - SQL Server : lower camelcase for each result

sql - 在 T-SQl 中使用 Like 来搜索由未知数量的空格分隔的单词

asp.net-mvc - 使用 Entity Framework 添加记录重复其他对象

c# - 如何在 C# MVC 中创建引用另一个模型两次的代码优先模型?

c# - 在不同的程序集上分布 Entity Framework 模型

entity-framework - 用于检索派生类型的 OData 查询

asp.net-mvc - viewModel 中的下拉列表创建 View

entity-framework - 首先从数据库模型自动更新代码,这可能吗?