【发布时间】:2016-07-08 09:50:41
【问题描述】:
我想使用代码优先迁移向现有表添加具有唯一索引的新列。因为表已经有数据,所以在创建新列时,所有现有行都设置为 NULL。迁移失败,因为这违反了新索引的唯一性约束。
这是我的迁移:
public override void Up()
{
AddColumn("dbo.SignInToken", "Token", c => c.String(maxLength: 32));
// How can I update existing rows here?
CreateIndex("dbo.SignInToken", "Token", unique: true);
}
还有错误:
CREATE UNIQUE INDEX 语句终止,因为发现对象名称“dbo.SignInToken”和索引名称“IX_Token”的重复键。重复键值为 ()。
新列将包含我在代码中设置的随机生成的字符串。
我知道我可以使用 Sql 方法在迁移中执行原始 SQL。我曾想过使用游标来更新每一行,但随后我将不得不编写一个存储过程来模仿生成随机标记的 C# 方法。我宁愿不必这样做。我想到的另一件事是,如果有办法检索所有行,我可以遍历它们并使用Sql 方法对每一行执行更新语句,但我不知道这是否可能。
有没有办法在添加唯一约束之前从迁移中单独更新所有现有行?
【问题讨论】:
标签: c# sql entity-framework ef-code-first entity-framework-migrations