相同实体之间的多个关系(发件人和收件人)

时间:2013-08-09 10:58:17

标签: c# .net entity-framework

我有2个实体。用户和消息。消息具有发件人和收件人。两者都是用户。 我想在User上为" SentMessages"公开导航属性。 && 34; ReceivedMessages"。需要什么Fluent配置来定义它?我尝试过多种组合并继续遇到异常:

  

介绍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;}
}

1 个答案:

答案 0 :(得分: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);
        }