Entity framework 实体框架中的外键-循环或多个级联路径错误

Entity framework 实体框架中的外键-循环或多个级联路径错误,entity-framework,foreign-keys,ef-code-first,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 BlogM

首先使用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; }
}
公共类博客
{
public int BlogID{get;set;}
公共字符串内容{get;set;}
公共虚拟用户用户{get;set;}
公共虚拟ICollection BlogMeta{get;set;}
}
公共类BlogMeta
{
public int BlogMetaID{get;set;}
公共字符串内容{get;set;}
公共虚拟用户用户{get;set;}
公共虚拟博客{get;set;}
}
这将成功生成表Blog和BlogMeta,并创建与用户表的外键关系。阅读后,我将其更改为以下内容:

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; }
}
公共类博客
{
public int BlogID{get;set;}
公共字符串内容{get;set;}
public int UserID{get;set;}
公共虚拟用户用户{get;set;}
公共虚拟ICollection BlogMeta{get;set;}
}
公共类BlogMeta
{
public int BlogMetaID{get;set;}
公共字符串内容{get;set;}
public int UserID{get;set;}
公共虚拟用户用户{get;set;}
public int BlogID{get;set;}
公共虚拟博客{get;set;}
}
现在它不起作用了。它生成表,然后在尝试创建关系时抛出以下错误:

在表“BlogMeta”上引入外键约束“BlogMeta_User”可能会导致循环或多个级联路径

那么引入
public int-UserID
有什么好处?为什么这样做会失败

编辑:
好的,我看到了独立关联和外键关联之间的区别。。。这就是我说的。这就留下了一个问题,为什么在使用外键关联时会抛出上述错误?

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

您可以将以下方法添加到您的上下文类中,以用于用户BlogMeta关系的diable cascade:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<BlogMeta>().HasRequired(bm => bm.User).WithMany().WillCascadeOnDelete(false);
    base.OnModelCreating(modelBuilder);
}  
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasRequired(bm=>bm.User).WithMany().WillCascadeOnDelete(false);
基于模型创建(modelBuilder);
}  

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

Blog和
BlogMeta
之间的关系是什么?您看到的错误意味着存在到SQL server不支持的BlogMeta实体的多个级联路径。我已经更新了问题,这两者之间存在一对多关系。谢谢