Entity framework 实体框架中的外键-循环或多个级联路径错误
首先使用EF代码,我有以下内容,例如: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
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实体的多个级联路径。我已经更新了问题,这两者之间存在一对多关系。谢谢