1

このエラーが発生する理由について少し混乱しています。

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.

クラスQuestionとクラスTermがあり、Questionsには任意の数の用語が関連付けられている可能性があり、Termsには任意の数のQuestionsが関連付けられている可能性があります。だから私は2つの間に多対多の関係を作ろうとしています。最初に規則を使用しようとしましたが、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");
            });
} 
4

2 に答える 2

2

OnModelCreating()メソッドに追加してみてください

  modelBuilder.Entity<Question>().HasRequired(oo => oo.Term).WithMany(oo => oo.Questions).WillCascadeOnDelete(false);
于 2012-04-17T16:40:21.633 に答える
2

問題は、カスケード削除がテーブル間を行ったり来たりすることです。

たとえば、最初に用語Aを削除すると、質問1、2、および3が削除されます。質問1は用語Bでも使用されたため、用語Bを削除する必要があります。

したがって、そのような制約の作成を停止します。

ここでそれを修正する方法についての良い報道があります:Entity Framework 4.1InversePropertyAttributeとForeignKey

編集

これは、他の問題の副作用である可能性があります。はるかに単純なモデルから始めて、徐々にそれを構築する必要があります。

例えば:

  • ProductIdとproductの両方があるのはなぜですか
  • なぜCategoryIdではなくCategory..。
于 2012-04-17T16:47:07.453 に答える