1

私は2つのエンティティを持っています。ユーザーとメッセージ。メッセージには送信者と受信者がいます。どちらもユーザーです。「SentMessages」と「ReceivedMessages」のユーザーのナビゲーション プロパティを公開したいと考えています。これを定義するには、どのような Fluent 構成が必要ですか? いくつかの組み合わせを試しましたが、例外が発生し続けます。

テーブル 'Message' に FOREIGN KEY 制約 'FK_dbo.Message_dbo.User_Recipient_Id' を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更します。

私のエンティティは次のようになります。

public class User{
 public int Id {get;set;}
 public virtual IEnumerable<Message> SentMessages {get;set;}
 public virtual IEnumerable<Message> ReceivedMessages {get;set;}
}

public class Message{
 public int Id {get;set;}
 public string Content {get;set;}
 public virtual User Sender{get;set;}
 public virtual User Recipient{get;set;}
}
4

1 に答える 1

0

Fluent API を介してカスケード削除を無効にする必要があります。コンテキストクラスでこれを行うことができます:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

            modelBuilder.Entity<Message>()
                        .HasRequired(a => a.Sender)
                        .WithMany()
                        .HasForeignKey(u => u.Sender).WillCascadeOnDelete(false);

            modelBuilder.Entity<Message>()
            .HasRequired(a => a.Recipient)
            .WithMany()
            .HasForeignKey(u => u.Recipient).WillCascadeOnDelete(false);
        }
于 2013-08-09T11:20:26.453 に答える