2016-03-22 11 views
0

私のプロジェクトにエンティティコードの最初の移行を使用しています。私はすでにシステムを稼働させています。しかし、私は外部キーである新しいGuid列を追加する必要があります。 - データベースを更新しようとしていますが、私は次のエラーが表示されます エンティティの最初の移行で新しいGUID列の既定値を追加

The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_dbo.Categories_dbo.aspnet_Roles_RoleId". The conflict occurred in database "HelpDesk", table "dbo.aspnet_Roles", column 'RoleId'.

は、だから私はいくつかの研究を行なったし、 Entity Framework 6 Code first Default valueを発見しました。しかし、私はGuidのデフォルト値を設定する方法を理解できません。ここで

移行されています:ここで私が試したコードがある私は(このコードに切り替える場合は、すべてのビルドエラーを取り除くことができる午前

public override void Up() 
{ 

    AddColumn("dbo.Categories", "RoleId", c => c.Guid(nullable: false, defaultValue: "4468ACB7-AD6F-471E-95CF-615115EA3A76")); 
    CreateIndex("dbo.Categories", "RoleId"); 
    AddForeignKey("dbo.Categories", "RoleId", "dbo.aspnet_Roles", "RoleId"); 
} 

public override void Down() 
{ 
    DropForeignKey("dbo.Categories", "RoleId", "dbo.aspnet_Roles"); 
    DropIndex("dbo.Categories", new[] { "RoleId" }); 
    DropColumn("dbo.Categories", "RoleId"); 
} 

が、まだ私を与えることアルター表の場合にエラー私は更新-データベースを実行します。

私はこれがデフォルト値として、特定のGUIDを追加するために変換するにはどうすればよい
AddColumn("dbo.Categories", "RoleId", c => c.Guid(nullable: false, identity: false, defaultValue: null)); 

答えて

0

それはあなたのデータベースの初期化子は、デフォルトの初期化子を使用していることだろう(クロム? eateDatabaseIfNotExists)?それらへの変更は時々同様の問題につながる可能性があります。

これは最終的な回答ではありませんが、問題と関連している可能性があります。私は、データベースInitializersの上品な記事へのリンクを添付して、それはあなたの問題を分離するのに役立ちます。私が言うことができるものから、

http://www.codeguru.com/csharp/article.php/c19999/Understanding-Database-Initializers-in-Entity-Framework-Code-First.htm

、あなたのコードは、問題の直接の原因であると思わdoesen't、それはより多くの移行スクリプトが問題を引き起こしているが生成されているように見えます。

+0

ペドロ下記参照デフォルトではGUIDが非NULL可能ではなく、彼らはすでにデータベースにレコードを存在するので - null非許容のレコードを追加することによって、このエラーを作成しないでしょうか?既にテーブルにあるすべてのレコードがこの要件を満たしていないためです。 – djblois

+0

ええ、それは良い点です、非常にうまくいくかもしれません! –

0

エラーから、このGuidの値"4468ACB7-AD6F-471E-95CF-615115EA3A76"をデータベースからコピーしてテスト用に使用したいと考えていましたが、EFはその値が既にテーブルに存在し、不平を言っていることに気付きました。ヌルを防止するように言ったので、nullを使用することもできません。nullable: false。だからあなたはそれに価値を与えることを期待しています。新しいGUIDを作成して使用することができます。

AddColumn("dbo.Categories", "RoleId", c => c.Guid(nullable: false, defaultValue: Guid.NewGuid().ToString())); 
+0

新しいGUIDを作成する必要はありません。私はその価値を使う必要があります。新しいフィールドは外部キーで、デフォルト値として設定する他のテーブルの値です。 – djblois

関連する問題