25

移行を追加した後、データベースを更新しようとするとエラーが発生します。

追加移行前の私のクラスは次のとおりです

public class Product
{
    public Product() { }

    public int ProductId { get; set; } 
    public string Name { get; set; }
    public decimal Price { get; set; }
    public bool Istaxable { get; set; }
    public string DefaultImage { get; set; }
    public IList<Feature> Features { get; set; }
    public IList<Descriptor> Descriptors { get; set; }
    public IList<Image> Images { get; set; }
    public IList<Category> Categories { get; set; }
}


public class Feature
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }

}

ここで、Featureクラスに外部キーを追加し、次のようにクラスをリファクタリングしたいと思いました。

public class Product
{
    public Product() { }

    public int ProductId { get; set; } 
    public string Name { get; set; }
    public decimal Price { get; set; }
    public bool Istaxable { get; set; }
    public string DefaultImage { get; set; }
    public IList<Feature> Features { get; set; }
    public IList<Descriptor> Descriptors { get; set; }
    public IList<Image> Images { get; set; }
    public IList<Category> Categories { get; set; }
}

public class Feature
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Image { get; set; }
    public string VideoLink { get; set; }

    public int ProductId { get; set; }
    public Product Product { get; set; }
}

Add-Migrationコマンドで移行を追加しました。コマンドを追加しましたUpdate-Database。これが返されました。

ALTERTABLEステートメントがFOREIGNKEY制約「FK_dbo.ProductFeatures_dbo.Products_ProductId」と競合しました。データベース「CBL」、テーブル「dbo.Products」、列「ProductId」で競合が発生しました

この問題を解決し、移行を通常に戻すにはどうすればよいですか?

4

6 に答える 6

2

これは、すでにデータが含まれているテーブルのnull許容でない列に外部キー制約を追加しようとしたときに発生する可能性があります。テーブルにデータが含まれている場合は、最初にそれらを削除してから、データベースの更新を再試行してください。

于 2012-12-18T19:31:14.827 に答える
2

簡単な答えは、最初に ProductId の null 許容列を追加し、次に既存のすべての行にデフォルト値を設定してから、将来の挿入のために列を非 null に設定し (必要な場合)、最後に外部キー制約を追加します。

私は完全なソースコードを含めたこれだけの長いブログ投稿を書きました - http://nodogmablog.bryanhogan.net/2015/04/entity-framework-non-null-foreign-key-migration/

于 2015-05-01T06:19:39.510 に答える