3

この手順を使用して、MVC プロジェクトで CodeFirst クラスを生成します。

1) メンバーシップ サポートを使用してアプリを実行し、メンバーシップを使用してメンバーシップの既定のテーブル (Membership、User、UserInRoles、...) を作成する MVC アクションを呼び出します。

2) 新しい .edmx ファイルをプロジェクトに追加し、ウィザードで [データベースから生成] を選択します

3) Visual Studio で .edmx ファイルの DB を編集 (新しいテーブルを追加)

4) .edmx の「モデルからデータベースを生成」を使用して新しいデータベースを作成する

5) Entity Framework Power Tools Beta 3 を「リバース エンジニア コード ファースト」で使用する

6) 既存のデータベースを削除し、コンテキストを使用する MVC アクションを呼び出す

このシナリオのより簡単な方法はありますか?

次のエラーが表示されます。

テーブル 'UsersInRoles' に FOREIGN KEY 制約 'FK_dbo.UsersInRoles_dbo.Users_Users_UserId' を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更します。制約を作成できませんでした。以前のエラーを参照してください。

エラーと、これに対する簡単で迅速な方法について教えてください。

ありがとう。

4

1 に答える 1

1

「カスケード削除」を無効にする必要があるようです。

このリンクからこの投稿を確認してくださいEF Fluent API

カスケード削除の有効化

WillCascadeOnDelete メソッドを使用して、リレーションシップでカスケード削除を構成できます。依存エンティティの外部キーが null 許容でない場合、Code First はリレーションシップにカスケード削除を設定します。依存エンティティの外部キーが null 許容の場合、Code First はリレーションシップにカスケード削除を設定せず、プリンシパルが削除されると、外部キーは null に設定されます。

これらのカスケード削除規則は、次を使用して削除できます。

modelBuilder.Conventions.Remove() モデルビルダー.Conventions.Remove()

次のコードは、リレーションシップが必須になるように構成し、カスケード削除を無効にします。

modelBuilder.Entity<Course>()
    .HasRequired(t => t.Department)
    .WithMany(t => t.Courses)
    .HasForeignKey(d => d.DepartmentID)
    .WillCascadeOnDelete(false);

これはすべて、EF Context ファイルにある必要があります。

注:無効にすることの欠点について考えるかもしれません。

幸運を!

于 2013-10-02T12:05:33.863 に答える