1

こんにちは、ドメイン モデルでこの問題を解決する方法を見つけようとしています。2 つの親クラスと 2 つの子クラスを使用して、私が扱っているものの簡単な例を作成しました。

親から子へのパスが複数あります。

  • 親 1 --> 子 1
  • 親 1 --> 子 2
  • 親 1 --> 親 2 --> 子 1
  • 親 2 --> 子 1

これにより、次のエラーが表示されます: {"参照関係により、許可されていない循環参照が発生します。[制約名 = Child1_Parent2 ]"}

複数のカスケード パスがあることが原因であることはわかっていますが、問題を解決する方法がわかりません。アノテーションを使ってそれを行うことはできますか? それとも流暢なマッピングを使用する必要がありますか?

モデルが次のように機能することを望みます。

  • Parent1 が削除された場合: Child1 は削除する必要がありますが、Child2 は削除しないでください。
  • Parent2 が削除された場合: Parent1Child1 は削除する必要がありますが、Child2 は削除しないでください。
  • Child1 が削除された場合: Child1 のみが削除されます。
  • Child2 が削除された場合: Child2 のみが削除されます。

クラスは次のとおりです。

親 1

public class Parent1
{
    [Key]
    public int Id { get; set; }

    [Required]
    public virtual Parent2 Parent2 { get; set; }

    public virtual ICollection<Child1> Children1 { get; set; }
    public virtual ICollection<Child2> Children2 { get; set; }

    public Parent1()
    {
        Children1 = new List<Child1>();
        Children2 = new List<Child2>();
    }
}

親 2

public class Parent2
{
    [Key]
    public int Id { get; set; }

    public virtual ICollection<Child1> Children1 { get; set; }

    public Parent2()
    {
        Children1 = new List<Child1>();
    }
}

子1

public class Child1
{
    [Key]
    public int Id { get; set; }

    [Required]
    public Parent1 Parent1 { get; set; }
    [Required]
    public Parent2 Parent2 { get; set; }
}

子2

public class Child2
{
    [Key]
    public int Id { get; set; }

    public Parent1 Parent1 { get; set; }
}
4

0 に答える 0