我有点困惑,为什么我收到这个错误:
Introducing FOREIGN KEY constraint 'FK_QuestionTerms_Terms_TermId'
on table 'QuestionTerms' may cause cycles or multiple cascade paths.
Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other
FOREIGN KEY constraints. Could not create constraint. See previous errors.
我有一个课程问题和一个课程术语,问题可能有任意数量的术语,并且术语可能有任意数量的问题。所以我试图在两者之间建立多对多的关系。首先我尝试使用约定,我允许EntityFramework创建数据库。这是问题类
public class Question
{
public Guid Id { get; set; }
public int QuestionNumber { get; set; }
public string StatementHtml { get; set; }
public string AnswerHeaderHtml { get; set; }
public string NotesHtml { get; set; }
public Guid CategoryId { get; set; }
public Guid CourseId { get; set; }
public Guid QuestionTypeId { get; set; }
public Guid? SimulationId { get; set; }
public Guid? SimulationTabId { get; set; }
public ICollection<Term> Terms { get; set; }
public ICollection<ReferenceItem> ReferenceItems { get; set; }
}
这是术语等级
public class Term
{
public Guid Id { get; set; }
public string Name { get; set; }
public string StatementHtml { get; set; }
public string Authority { get; set; }
public Guid ProductId { get; set; }
public Product Product { get; set; }
public ICollection<Question> Questions { get; set; }
}
我还尝试按如下方式覆盖OnModelCreating,两个进程结果都是完全相同的错误代码。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Question>()
.HasMany(q => q.Terms)
.WithMany(t => t.Questions)
.Map(x =>
{
x.MapLeftKey("QuestionId");
x.MapRightKey("TermId");
x.ToTable("QuestionTerms");
});
}
答案 0 :(得分:2)
尝试在OnModelCreating()方法中添加它
modelBuilder.Entity<Question>().HasRequired(oo => oo.Term).WithMany(oo => oo.Questions).WillCascadeOnDelete(false);
答案 1 :(得分:2)
问题是cacade delete会在表之间来回传递。
例如,首先删除将删除问题1,2和3的术语A.问题1也用于术语B,因此术语B必须删除.....
因此,它会阻止您创建此类约束。
这里有很好的解决方法:Entity Framework 4.1 InverseProperty Attribute and ForeignKey
修改强>
这可能是其他问题的副作用。你应该从一个更简单的模型开始,然后逐步建立起来。
例如: