こんにちは、ドメイン モデルでこの問題を解決する方法を見つけようとしています。2 つの親クラスと 2 つの子クラスを使用して、私が扱っているものの簡単な例を作成しました。
親から子へのパスが複数あります。
- 親 1 --> 子 1
- 親 1 --> 子 2
- 親 1 --> 親 2 --> 子 1
- 親 2 --> 子 1
これにより、次のエラーが表示されます: {"参照関係により、許可されていない循環参照が発生します。[制約名 = Child1_Parent2 ]"}
複数のカスケード パスがあることが原因であることはわかっていますが、問題を解決する方法がわかりません。アノテーションを使ってそれを行うことはできますか? それとも流暢なマッピングを使用する必要がありますか?
モデルが次のように機能することを望みます。
- Parent1 が削除された場合: Child1 は削除する必要がありますが、Child2 は削除しないでください。
- Parent2 が削除された場合: Parent1とChild1 は削除する必要がありますが、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; }
}