2
我目前爲我的實體框架設置了以下模型和數據庫上下文。 關係如下:TableA和TableB都有多對多的關係。實體框架5.0 - 爲多對多關係編寫查詢
的DbContext:
public partial class MyContext : DbContext
{
public MyContext (string connString)
: base(connString)
{
this.Configuration.ProxyCreationEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<TableA>().HasMany(x => x.TableB).WithMany(
x => x.TableA).Map(m =>
{
m.ToTable("TableC");
m.MapRightKey("B_ID");
m.MapLeftKey("C_ID");
});
}
public DbSet<TableA> TableA { get; set; }
public DbSet<TableB> TableB { get; set; }
}
實體:
public partial class TableA
{
public TableA()
{
this.TableB = new List<TableB>();
}
[Key]
public int A_ID { get; set; }
public string A_Name { get; set; }
public virtual ICollection<TableB> TableB { get; set; }
}
public partial class TableB
{
public TableB()
{
this.TableA = new List<TableA>();
}
[Key]
public int B_ID { get; set; }
public string B_Name { get; set; }
public virtual ICollection<TableA> TableA { get; set; }
}
注:由於表C是一個純粹的結合表,實體框架不需要實體它。
當我運行下面的命令:
MyContext.TableA.GetList();
它返回需要表A的對象列表,但是每個列表中的對象不包括在指定表B屬性的列表實體定義。
相同的行爲發生在我做
MyContext.TableB.GetList();
有我正確地設置這還是我失去了一些細微的設置?
這只是一個猜測,但延遲加載可能被禁用,因爲您已將ProxyCreationEnabled設置爲false。您需要刪除該行或急於加載相關信息。 –
這似乎解決了我的問題。如果您願意,請繼續提交此答案作爲答案。感謝Morten Mertner。 – nav
謝謝,只是很高興有幫助。 –