2

私はこのエンティティを持っています:

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に伝える方法はありますか?

4

1 に答える 1

1

シンプルであることが判明しました:

        HasMany(x => x.Referals).WithMany(x => x.Encapsulated).Map(c =>
            {
                c.ToTable("DataFieldJoin");
                c.MapLeftKey("RefId");
                c.MapRightKey("EncapId");
            });
于 2013-06-11T12:02:25.377 に答える