基本上,我在我的EF数据库中有一个表,具有以下属性:
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Image { get; set; }
public string WatchUrl { get; set; }
public int Year { get; set; }
public string Source { get; set; }
public int Duration { get; set; }
public int Rating { get; set; }
public virtual ICollection<Category> Categories { get; set; }
它工作得很好,但当我改变评级的int为双精度时,我在更新数据库时得到以下错误:
对象'DF_Movies_Rating__48CFD27E'依赖于列'Rating'。
由于有一个或多个对象访问该列,导致该列评级失败。
有什么问题吗?
当我们试图删除一个依赖的列时,我们会看到这样的错误:
对象“DF__*”依赖于列”。
删除依赖于该列的约束:
ALTER TABLE TableName DROP CONSTRAINT dependent_constraint;
例子:
编号5074,16层,状态1,1线
对象'DF__Employees__Colf__1273C1CD'依赖于列'Colf'。
编号4922,16层,9号州,1号线
ALTER TABLE DROP COLUMN Colf失败,因为有一个或多个对象访问该列。
删除约束(DF__Employees__Colf__1273C1CD):
ALTER TABLE Employees DROP CONSTRAINT DF__Employees__Colf__1273C1CD;
然后你可以删除列:
Alter Table TableName Drop column ColumnName
由于约束有不可预知的名字,你可以写一个特殊的脚本(DropConstraint)来删除它,而不知道它的名字(在EF 6.1.3测试):
public override void Up()
{
DropConstraint();
AlterColumn("dbo.MyTable", "Rating", c => c.Double(nullable: false));
}
private void DropConstraint()
{
Sql(@"DECLARE @var0 nvarchar(128)
SELECT @var0 = name
FROM sys.default_constraints
WHERE parent_object_id = object_id(N'dbo.MyTable')
AND col_name(parent_object_id, parent_column_id) = 'Rating';
IF @var0 IS NOT NULL
EXECUTE('ALTER TABLE [dbo].[MyTable] DROP CONSTRAINT [' + @var0 + ']')");
}
public override void Down()
{
AlterColumn("dbo.MyTable", "Rating", c => c.Int(nullable: false));
}