1

我有三个模型类:

  1. 用户。
  2. 入口。
  3. 入口喜欢。

如下:

public class User
{
    [Required]
    public int ID { get; set; }

    [Required]
    [DataType(DataType.Text)]
    public string Name { get; set; }
}
public class Entry
{
    [Required]
    public int ID { get; set; }

    public int UserID { get; set; }
    [ForeignKey("UserID")]
    public virtual User User { get; set; }
}
public class EntryLike
{
    [Required]
    public int ID { get; set; }

    [Required]
    public int UserID { get; set; }
    [ForeignKey("UserID")]
    public virtual User User { get; set; }

    [Required]
    public int EntityID { get; set; }
    [ForeignKey("EntityID")]
    public virtual Entry Entry { get; set; }
}

执行后我得到以下异常:

在表“EntryLikes”上引入 FOREIGN KEY 约束“FK_dbo.EntryLikes_dbo.Entries_EntityID”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束。请参阅以前的错误。

4

2 回答 2

0

为什么你与来自 EntryLike 和来自 Entry 的 User 有外键关系?鉴于您在 Entry 类上存在 Entry 和 User 之间的关系,您不需要在 EntryLike 类上建立关系,因为可以根据 EntryLike 和 Entry 之间的关系来推断它。此外,是否应该将 EntryLike 上的外键 id 属性称为 EntryID 而不是 EntityID?

编辑:这是因为您有多个级联路径到您的用户 - 一个是 Entry > User,另一个是 EntryLike > Entry > User。您需要关闭级联删除以阻止此错误的发生。我在评论中添加的链接应该能让你走上正轨。

于 2012-12-16T13:38:19.507 回答
0

您必须为至少EntryLike涉及其中一个关系禁用级联删除。默认情况下,每个所需的一对多关系都会启用级联删除。您需要 Fluent API,这是不可能的数据注释。例如:

modelBuilder.Entity<EntryLike>()
    .HasRequired(el => el.Entry)
    .WithMany()
    .HasForeignKey(el => el.EntryID)
    .WillCascadeOnDelete(false);
于 2012-12-16T15:10:51.683 回答