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 回答