それぞれが他のコレクションを含む 2 つの POCO クラスがあります。これらのクラス間に多対多の関係を構成しようとしています。ただし、コンテキストを読み込むと、EF は各オブジェクトのコレクションをまったく設定しません。これはどのように自動的に行うことができますか?
public class POCO1
{
public int ID { get; set; }
public virtual ICollection<POCO2> POCO2s { get; set; }
}
public class PCOO2
{
public int ID { get; set; }
public virtual ICollection<POCO1> POCO1s { get; set; }
}
public class POCOContext : DbContext
{
public DbSet<POCO1> POCO1s { get; set; }
public DbSet<POCO2> POCO2s { get; set; }
modelBuilder.Entity<POCO1>()
.HasKey(p => p.ID);
modelBuilder.Entity<POCO1>()
.HasMany(p => p.POCO2s).WithMany(p => p.POCO1s);
modelBuilder.Entity<POCO2>()
.HasKey(p => p.ID);
modelBuilder.Entity<POCO2>()
.HasMany(p => p.POCO1s).WithMany(p => p.POCO2s);
}
public class Test
{
static void Main(string[] args)
{
using (var context = new POCOContext())
{
context.Database.Initialize(true);
var p1 = context.POCO1s.Create();
var p2 = context.POCO2s.Create();
p1.POCO2s.Add(p2);
p2.POCO1s.Add(p1);
context.saveChanges();
}
// reload context from db
using (var context = new POCOContext())
{
context.POCO1s.ToList()[0].POCO2s.Count(); // == 0, but should be 1
context.POCO2s.ToList()[0].POCO1s.Count(); // == 0, but should be 1
}
}
}
詳細情報を含めるように編集します。私が読んだことから、注釈を含めたり、Fluent API を使用してキーを指定したりする必要はありません。これらの規則を使用すると、EF 5.0 は関係を正しく構成する必要があります。データベース テーブルは最初にコードを使用して正しく構築されているため (POCO1 テーブル、POCO2 テーブル、交差テーブルがあり、これらはすべてテスト中に正しく取り込まれます)、実際にそのように見えます。問題は、データを読み戻すときに、多対多の関係が取り込まれていないように見えることです。SO に関する他の投稿、さまざまなチュートリアル、および MSDN のドキュメントでは、適切な規則、遅延読み込み、および仮想コレクションを使用すると機能するはずですが、それは私が見ている動作ではありません。