こんにちは私は次のモデルをマッピングするのに少し苦労しています:
[Table("ColumnRules")]
public class ColumnRuleEntity
{
[Required]
public virtual ColumnEntity ParentColumn { get; set; }
public virtual IList<ColumnEntity> DependentColumns { get; set; }
}
OnModel作成オーバーライドに次のコードを追加しました。
modelBuilder.Entity<ColumnRuleEntity>().HasMany(r => r.DependentColumns)
.WithMany().Map(mc => mc.ToTable("ColumnRuleDependentColumns")
.MapLeftKey("ColumnRuleId").MapRightKey("ColumnId"));
ParentColumnプロパティを使用してOneToMany関係を作成し、DependentColumnsプロパティを使用してManyToMany関係を作成しようとしています。
私が遭遇した問題は、このコードだけで、結果のリンクテーブルのデータに対して複数のカスケード削除パスが生成されることです。(列を削除すると、リンクテーブルのエントリが削除されるColumnRulesが削除されますが、同時に、リンクテーブルの同じエントリの削除をトリガーする列が削除されます)。
私が考えた解決策の1つは、リンクテーブルのエントリを表す別のエンティティを作成し、ColumnRuleエンティティを削除するときのみカスケード削除し、Columnエンティティを削除するときは削除しないことでした。でもこれはちょっと面倒だと思います。これを行うことができる他の方法はありますか?