私は、アプリケーションのような単純なコードファーストのMVC3ブログを作成しています。私のモデルには、ユーザー、コメント、チュートリアルの3つのテーブルがあります。コメントテーブルには、ユーザーとチュートリアルの両方のFKがあります。チュートリアルには、ユーザーの外部キーもあります。
プログラムを実行すると、次のエラーが発生します。
Introducing FOREIGN KEY constraint 'FK_Comments_Users_UserID' on table 'Comments'
may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON
UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.
この問題は、カスケード削除と呼ばれるものが原因で発生しているようです。これに対するMicrosoftの解決策は、より優れたDB設計(http://support.microsoft.com/kb/321843 )を用意することです。しかし、このDBはあなたが得ることができるのと同じくらい単純なようです。
私のdbコンテキストクラスに次のコードを追加することでこの問題に対処しているように見える他のいくつかの投稿(最初にEntityFrameworkコード-FOREIGNKEY制約問題)を見つけました:protected override void OnModelCreating(DbModelBuilder modelBuilder){
modelBuilder.Entity<User>()
.HasMany(u => u.Comments)
.HasRequired(c => c.User)
.HasForeignKey(c => c.UserId)
.WillCascadeOnDelete(false);
}
残念ながら、VisualStudioは「.HasRequired」の構文に腹を立てます。実際のエラーは「エラー1」です。System.Data.Entity.ModelConfiguration.Configuration.ManyNavigationPropertyConfiguration'には「HasRequired」の定義が含まれておらず、拡張メソッド「HasRequired」は含まれていません。タイプ'System.Data.Entity.ModelConfiguration.Configuration.ManyNavigationPropertyConfiguration'の最初の引数を受け入れることが見つかりました(usingディレクティブまたはアセンブリ参照がありませんか?) "
ここに私が欠けている単純なものがあるようです。データベースをより適切に再構築するにはどうすればよいですか、またはこの周期的な冗長性の問題をどのように解決できますか?