【发布时间】:2013-03-25 00:31:54
【问题描述】:
我最初迁移的代码如下
CreateTable( "dbo.Sites", c => new { Id = c.Int(nullable: false, identity: true), Description = c.String(maxLength: 450) }) .PrimaryKey(t => t.Id);
为了使描述字段是唯一的,我在 UP 方法的末尾添加了以下内容
CreateIndex("dbo.Sites", "Description", unique: true);
后来我决定将描述字段设为必填。
新的迁移会产生以下变化
AlterColumn("dbo.Sites", "Description", c => c.String(nullable: false, maxLength: 450));
但是,当此更改尝试运行时,我得到一个错误
ALTER TABLE ALTER COLUMN 描述失败,因为一个或多个对象访问此列。
我能够使用分析器隔离 SQL 行,因为
ALTER TABLE [dbo].[Sites] ALTER COLUMN [Description] nvarchar NOT NULL
当我在 Management Studio 中运行它时出现以下错误
消息 5074,第 16 级,状态 1,第 1 行 索引“IX_Description”取决于“描述”列。 消息 4922,第 16 级,状态 9,第 1 行 ALTER TABLE ALTER COLUMN 描述失败,因为一个或多个对象访问此列。
如何让迁移代码删除索引,然后更改更改列,然后重新构建索引?
我使用的是 SQL Server 2008 R2
【问题讨论】:
-
对可为空的列使用唯一索引很奇怪。 Null 与其他任何值一样是值,因此只有一条记录能够具有 Null 值,否则您将收到唯一约束违规。
-
我虽然是 NULL != NULL 但我认为我最近没有尝试过 - 值得一试。
-
我希望空白成为组合框中的有效选项。我应该有 Null 还是空字符串?
标签: entity-framework-5 entity-framework-migrations