entity-framework - Entity Framework 中的外键 - 循环或多级联路径错误

标签 entity-framework foreign-keys ef-code-first

首先使用 EF 代码我有以下内容,例如:

public class Blog
{
    public int BlogID { get; set; }
    public string Content { get; set; }
    public virtual User User { get; set; }
    public virtual ICollection<BlogMeta> BlogMeta { get; set; }
}

public class BlogMeta
{
    public int BlogMetaID { get; set; }
    public string Content { get; set; }
    public virtual User User { get; set; }
    public virtual Blog Blog { get; set; }
}

这成功生成了表 Blog 和 BlogMeta 并创建了与 User 表的外键关系。看完this我将其更改为以下内容:

public class Blog
{
    public int BlogID { get; set; }
    public string Content { get; set; }
    public int UserID { get; set; }
    public virtual User User { get; set; }
    public virtual ICollection<BlogMeta> BlogMeta { get; set; }
}

public class BlogMeta
{
    public int BlogMetaID { get; set; }
    public string Content { get; set; }
    public int UserID { get; set; }
    public virtual User User { get; set; }
    public int BlogID { get; set; }
    public virtual Blog Blog { get; set; }
}

现在不行了。它生成表,然后在尝试创建关系时抛出以下错误:

Introducing FOREIGN KEY constraint 'BlogMeta_User' on table 'BlogMeta' may cause cycles or multiple cascade paths.

那么引入public int UserID有什么好处,为什么会失败呢?

编辑: 好的,所以我遇到了this answer它概述了独立关联和外键关联之间的区别......事实证明这就是我在说的。那么这就留下了一个问题,为什么在使用外键关联的时候会抛出上面的错误呢?

最佳答案

正如 Ladislav 提到的,您正在为 BlogMeta 实体定义多个级联路径。您必须为您的一种关系禁用级联。

您可以将以下方法添加到上下文类中,以禁用 User-BlogMeta 关系的级联:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<BlogMeta>().HasRequired(bm => bm.User).WithMany().WillCascadeOnDelete(false);
    base.OnModelCreating(modelBuilder);
}  

如果您在 User 中定义了 BlogMeta 的集合,则可以指示关系的另一端 (WithMany(u => u.BlogMetas)) 类。

关于entity-framework - Entity Framework 中的外键 - 循环或多级联路径错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7946793/

相关文章:

php - 如何编写主表和副表的 SQL 多插入查询

c# - CodeFirst EF4.1 MVC Against legacy database - 多重性冲突

c# - 可以在 EF 代码第一次迁移种子方法中设置断点吗?

c# - 如何在不使用查询语法的情况下在 Entity Framework 中进行左外连接?

c# - Entity Framework 直接更新虚拟属性而不创建新记录

MySQL通过更多表进行外键约束

entity-framework - Entity Framework 代码优先 : One-to-Many and Many-to-Many relationships to same table

c# - 如何将事件数据库上下文传递给 Entity Framework 验证器

c# - Entity Framework Code First MySql 复数表

django - fk_name 'user' 不是 <class 'satchmo_store.contact.models.Contact' > 的外键