6

EF4.3.1コードファーストマイグレーションを使用しています。私は次のようなテーブルを持っています:

public class Product
{
    [Key]
    [Column(Order=0)]
    [MaxLength(100)]
    public string Store { get; set; }

    [Key]
    [Column(Order=1)]
    [MaxLength(100)]
    public string Sku { get; set; }
}​

上記のコードで作成された既存のテーブルがあります。次に、それを単一列の主キーに移動しました。

public class Product
{
    [MaxLength(100)]
    public string Store { get; set; }

    [Key]
    [MaxLength(100)]
    public string Sku { get; set; }
}​

これにより、EFは次の自動移行で失敗し、次のように不平を言います。

ALTERTABLE[製品]ALTERCOLUMN[ストア]nvarchar

オブジェクト'PK_Product'は、列'Store'に依存しています。1つ以上のオブジェクトがこの列にアクセスするため、ALTER TABLEALTERCOLUMNストアが失敗しました。

明らかに、このALTERステートメントを起動する前にPK_Productを削除する必要がありますが(なぜ列を変更するのですか?)、代わりに移行は失敗します。

私は何か間違ったことをしていますか、それともこれはバグですか?回避策?

4

1 に答える 1

13

自動移行ではこれを行うことはできません。を使用して移行を作成してからAdd-Migration、PKのみを変更するように変更する必要があります。

移行は次のように簡単に行うことができます。

public partial class TheMigration : DbMigration
{
    public override void Up()
    {
        DropPrimaryKey("Products", new[] { "Store", "Sku" });
        AddPrimaryKey("Products", "Sku");
    }

    public override void Down()
    {
        DropPrimaryKey("Products", new[] { "Sku" });
        AddPrimaryKey("Products", new[] { "Store", "Sku" });
    }
}

EFが列を変更しているのは、それがの一部である場合Key、暗黙的に。であるためNOT NULLです。そのままにするか、属性を追加するか、PKを削除した後に[Required]EFが列を変更できるようにすることができます。

于 2012-06-19T19:58:12.123 に答える