2012-04-01 27 views
1

同じエンティティと多対多の関係を実装する際に問題があります。EF単一エンティティの多対多

public class District 
{ 
    [Key] 
    public int DistrictId { get; set; } 

    [Required] 
    public string Title { get; set; } 

    [Required] 
    public string Abbreviation { get; set; } 

    public List<District> SubDistricts { get; set; } 
} 

私の目標は、同じテーブル内のすべての地区を持っている、と彼らは多くの地区に、多くの地区が相関していることです。ここに私のクラスです。

マッピングを指定しないと、EFコードファーストは1対多の関係のように動作します。

私はビルダーをモデル化するために指示を与えることを試みたが、それは働いていない:

modelBuilder.Entity<District>() 
    .HasMany(d => d.SubDistricts) 
    .WithMany(d => d.SubDistricts) 
    .Map(mc => { mc.ToTable("DistrictLinks", "dbo"); 
       mc.MapLeftKey("ParentId"); 
       mc.MapRightKey("ChildId"); 
       }); 

はWFでこれを行う方法はありますか?前もって感謝します!

答えて

4

あなたはパラメータを取りませんWithManyオーバーロードを使用する必要があります。

modelBuilder.Entity<District>() 
    .HasMany(d => d.SubDistricts) 
    .WithMany() 
    .Map(mc => { mc.ToTable("DistrictLinks", "dbo"); 
       mc.MapLeftKey("ParentId"); 
       mc.MapRightKey("ChildId"); 
       }); 

同じナビゲーションプロパティを同時に開始し、協会の終わりであるということはできません。彼らは異なっていなければなりません、または終わりは "見えない"で、あなたのモデルの場合のようにモデルには公開されません。

2

解決策はうまくいきます、ありがとうございます!一方で、私は問題を解決する別の方法を思いついた。ので、私のマッピングは次のようになります

public List<District> ChildDistricts { get; set; } 
public List<District> ParentDistricts { get; set; } 

:基本的に私はクラスに2つのナビゲーションプロパティを作成した結果

modelBuilder.Entity<District>() 
    .HasMany(d => d.ParentDistricts) 
    .WithMany(d => d.ChildDistricts) 
    .Map(mc => { mc.ToTable("DistrictLinks", "dbo"); 
       mc.MapLeftKey("ParentId"); 
       mc.MapRightKey("ChildId"); 
       }); 

、私は、SQL Serverのテーブルのまったく同じ種類を得るが、私はこれのようによりよくナビゲートできると信じています。私は、実際には地区間のリンクだけでなく、ここでも階層が重要であると言及することを忘れていました。

もう一度ありがとうございました:)

+0

はい、それも可能です:) – Slauma

関連する問題