問題があります。 私はこのように見えるいくつかのクラスている:彼らは多くの関係に多くをEF多対多カスケード削除
public class Question
{
public int Id { get; set; }
[Required] [MaxLength(255)] public string Text { get; set; }
public int CriteriaId { get; set; }
public int QuestionGroupId { get; set; }
public QuestionGroup QuestionGroup { get; set; }
public virtual IList<Answer> Answers { get; set; }
public virtual Criteria Criteria { get; set; }
}
public class Answer
{
public int Id { get; set; }
[Required] [MaxLength(255)] public string Text { get; set; }
public int QuestionId { get; set; }
public Question Question { get; set; }
public virtual IList<State> States { get; set; }
}
public class Criteria
{
public int Id { get; set; }
[Required] [MaxLength(100)] public string Name { get; set; }
public virtual IList<State> States { get; set; }
public IList<Question> Questions { get; set; }
}
public class State
{
public int Id { get; set; }
public int CriteriaId { get; set; }
[Required] [MaxLength(100)] public string Name { get; set; }
public int Score { get; set; }
public virtual IList<Filter> Filters { get; set; }
public Criteria Criteria { get; set; }
}
を持っているので、私はこのマッピングを作成しました:
modelBuilder.Entity<Answer>()
.HasMany(m => m.States)
.WithMany()
.Map(m => {
m.MapLeftKey("AnswerId");
m.MapRightKey("StateId");
m.ToTable("AnswerStates");
});
私は自分のデータベースを更新しようとしたとき、私はに関するエラーが出ます外部キー。 だから私は(一時的な修正として)この行を追加:
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
しかし、私はカスケード削除する必要があります。 なぜそれが私に許されないのか分かりません。カスケードが含まれるようにしようとすると、削除されたときに私が手 エラーがある:サイクルまたは複数のカスケードパスを引き起こす可能性がFOREIGN KEY制約「FK_dbo.AnswerStates_dbo.States_StateId」「AnswerStates」テーブル上の紹介
。 NO DELETE NO ACTIONまたはUP UP NO NO ACTIONを指定するか、他のFOREIGN KEY制約を変更してください。
私は十分な情報を提供したいと考えています。誰もが私は州または回答を削除できるようにする必要があります(カスケード削除できるようにするために何ができるかを知ってい、それはAnswerStates
それは直接ポストから見ていません、 'Answer.Question'と' State.Criteria'に由来する一般的なカスケード削除パスがあるようです。 'Question'と' Criteria'モデルを投稿できますか? –
うまくいけば、それらを追加しました – r3plica
複数のカスケードパスは、 'States'プロパティを持つ' Criteria'と 'Answer'の両方によって引き起こされるので、それらは両方ともカスケード削除状態を試みます。さらに、多対多はカスケード削除では決して実装されません。マイグレーションで手動で追加するか、または関連付けを「1-n-1」に変更する必要があります。つまり、モデルにエンティティとして「AnswerStates」を描画します。 –