私はこのエンティティを持っています:
public abstract class DataField
{
[Key]
public Guid Id { get; set; }
public virtual ICollection<DataField> Referals { get; set; }
public virtual ICollection<DataField> Encapsulated { get; set; }
}
そしてこの地図:
public class DataFieldMapping : EntityTypeConfiguration<DataField>
{
public DataFieldMapping()
{
HasMany(x => x.Referals).WithMany(x => x.Encapsulated);
HasMany(x => x.Encapsulated).WithMany(x => x.Referals);
ToTable("DataField");
}
}
要点は、DataField は多くのカプセル化された DataField を持つことができ、それ自体が他の多くの DataField によってカプセル化/参照される可能性があるということです。
両方の HasMany 行が必要かどうかはわかりません。しかし...
2 つの DataFields を作成するテストを実行すると、一方は他方を参照し、もう一方は最初のデータフィールドによってカプセル化されます。次のエラーが発生します。
オブジェクト名 'dbo.DataFieldDataFields' が無効です。
多対多の関係を別のテーブルに格納する必要があることは理にかなっています。したがって、適切な列を持つ DataFieldDataFields というテーブルを作成するとうまくいくと思います。しかし、このテーブルが DataFieldDataFields 以外の名前であることを EF に伝える方法はありますか?
編集:そのテーブルを作成しましたが、機能します。ただし、EF は、そのテーブルの列の名前が DataField_Id および DataField_Id1 であることを想定しています。同じ問題:列とテーブルに別の名前を付けたい場合、これらの列の名前とテーブル自体の名前をEFに伝える方法はありますか?