[英]Entity Framework many-to-many not populating collections
我有兩個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文檔都建議使用正確的約定,延遲加載和虛擬集合應該可以工作,但這不是我所看到的行為。
就我而言,問題是由於在我的實際代碼中在上下文上禁用了代理創建(即context.Configuration.ProxyCreationEnabled = false;
)。 原始問題中描述的“自動收集填充”功能稱為“延遲加載”,它需要啟用代理創建。 此MSDN文章具有更多信息。
另外,如原始問題中所述,此功能按慣例工作,而無需指定鍵或關系(使用批注或流暢的API)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.