基本上,我在我的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'。
由于有一个或多个对象访问该列,导致该列评级失败。
有什么问题吗?
我添加这个是为了解释约束的来源。
我试着在评论中这样做,但很难很好地编辑:-/
如果您创建(或修改)具有默认值列的表,它将为您创建约束。
例如,在你的表格中,它可能是:
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;
你可以结合这最后两个语句,这样你就可以在一行中改变列和命名约束(如果它是一个现有的表,你必须这样做)
我添加这个是为了解释约束的来源。
我试着在评论中这样做,但很难很好地编辑:-/
如果您创建(或修改)具有默认值列的表,它将为您创建约束。
例如,在你的表格中,它可能是:
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;
你可以结合这最后两个语句,这样你就可以在一行中改变列和命名约束(如果它是一个现有的表,你必须这样做)