202

基本的に、次のプロパティを持つ 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; }

正常に動作しますが、Rating の int を double に変更すると、データベースの更新時に次のエラーが発生します。

オブジェクト「DF_ Movies _Rating__48CFD27E」は列「Rating」に依存しています。ALTER TABLE ALTER COLUMN 1 つ以上のオブジェクトがこの列にアクセスしているため、評価に失敗しました。

問題は何ですか?

4

9 に答える 9

300

これを試して:

フィールド タイプを変更する前に、制約DF_Movies_Rating__48CFD27Eを削除してください。

通常、制約は DBMS (SQL Server) によって自動的に作成されます。

テーブルに関連付けられている制約を確認するには、オブジェクト エクスプローラーでテーブルの属性を展開し、次に示すように [制約]カテゴリを展開します。

あなたの食卓の木

フィールド タイプを変更する前に、制約を削除する必要があります。

于 2013-10-19T01:10:03.930 に答える
29

制約には予測できない名前があるため、特別なスクリプト ( 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));    
}
于 2016-10-12T14:39:21.387 に答える
10

依存している列を削除しようとすると、次のようなエラーが表示されます。

オブジェクト '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 1 つ以上のオブジェクトがこの列にアクセスするため、Colf が失敗しました。

ドロップ制約 (DF__Employees__Clf__1273C1CD):

ALTER TABLE Employees DROP CONSTRAINT DF__Employees__Colf__1273C1CD;

次に、列をドロップできます。

Alter Table TableName Drop column ColumnName
于 2015-10-07T16:08:05.027 に答える