質問

私はこのような関係を構築したいです(ゾーンはx他のゾーンの近くにあります)

public class Zone
{
    public string Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<ZoneNeighourhood> ZoneNeighourhoods { get; set; }
}

public class ZoneNeighbourhood
{
    public virtual Zone Zone1 { get; set; }
    public virtual Zone Zone2 { get; set; }
}

残念ながら、これはうまくいきません。EFによって生成されたFKSが正しくないため...このような構造を機能させるにはどうすればよいですか?

3つのゾーンの例:ゾーン1、ゾーン2、ゾーン3

ゾーン1ネイバーズ:

ゾーン2、ゾーン3

ゾーン2ネイバー:

ゾーン1

ゾーン3ネイバー:

ゾーン1

何かアドバイス?

役に立ちましたか?

解決

マッピングは正しくありません。自己参照エンティティを作成しているため、着信と発信の関係のために個別のコレクションが必要です。単一のコレクションでは十分ではありません。

public class Zone 
{
    public string Id { get; set; }
    public string Name { get; set; }
    [InverseProperty("NeighbourOf")]
    public virtual ICollection<Zone> NeighbourTo { get; set; }
    [InverseProperty("NeighbourTo")]
    public virtual ICollection<Zone> NeighbourOf { get; set; }
}

関係にいくつかの追加プロパティを追加したい場合を除き、ジャンクションテーブルをマップする必要はありません。

単一のコレクションのみが必要な場合は、Fluentマッピングを使用する必要があります。

public class Zone 
{
    public string Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Zone> Neighours { get; set; }
}

public class Context : DbContext
{
    public DbSet<Zone> Zones { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Zone>()
                    .HasMany(z => z.Neighbours)
                    .WithMany();
    }
}

他のヒント

デイブ、

ただどうですか:

public class Zone {
    public string Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Zone> Neighours { get; set; }
}

それとも私は何かが足りませんか?他の理由で近隣を外部エンティティとしてモデル化する必要がありますか?エンティティフレームワークがそのために生成するデータベーススキーマは...私は専門家ではありません。実際、私はこの分野のNOOBです。私はそれがこのようなテーブルの自己再送信に問題があるとは思わない...これまで私がこれまで読んだことはそれを示すものは何もない。それを試して見つけましょう;-)

乾杯。キース。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top