基本上,我在我的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'。 由于有一个或多个对象访问该列,导致该列评级失败。

有什么问题吗?


当前回答

我在运行迁移时出现了这个错误 为了解决这个问题,我重新命名了列,并使用

add-migration migrationname -force

在包管理器控制台中。那时我就能跑了

update-database

成功。

其他回答

当我们试图删除一个依赖的列时,我们会看到这样的错误:

对象“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

这是tsql方法

 ALTER TABLE yourtable DROP CONSTRAINT constraint_name     -- DF_Movies_Rating__48CFD27E

为了完整起见,这只是将@Joe Taras的评论显示为答案

我添加这个是为了解释约束的来源。 我试着在评论中这样做,但很难很好地编辑:-/

如果您创建(或修改)具有默认值列的表,它将为您创建约束。

例如,在你的表格中,它可能是:

CREATE TABLE Movie (
    ...
    rating INT NOT NULL default 100
)

它将为默认的100创建约束。

如果你像这样创建它

CREATE TABLE Movie (
  name VARCHAR(255) NOT NULL,
  rating INT NOT NULL CONSTRAINT rating_default DEFAULT 100
);

然后,您将得到一个命名良好的约束,在修改所述表时更容易引用。

ALTER TABLE Movie DROP CONSTRAINT rating_default;
ALTER TABLE Movie ALTER COLUMN rating DECIMAL(2) NOT NULL;
-- sets up a new default constraint with easy to remember name
ALTER TABLE Movie ADD CONSTRAINT rating_default DEFAULT ((1.0)) FOR rating;

你可以结合这最后两个语句,这样你就可以在一行中改变列和命名约束(如果它是一个现有的表,你必须这样做)

试试这个:

在更改字段类型之前,删除约束DF_Movies_Rating__48CFD27E。

约束通常是由DBMS (SQL Server)自动创建的。

要查看与表相关的约束,在对象资源管理器中展开表属性,然后是类别Constraints,如下所示:

在更改字段类型之前,必须删除约束。

我在运行迁移时出现了这个错误 为了解决这个问题,我重新命名了列,并使用

add-migration migrationname -force

在包管理器控制台中。那时我就能跑了

update-database

成功。