2013-06-05 73 views
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(); 

有我正確地設置這還是我失去了一些細微的設置?

+2

這只是一個猜測,但延遲加載可能被禁用,因爲您已將ProxyCreationEnabled設置爲false。您需要刪除該行或急於加載相關信息。 –

+0

這似乎解決了我的問題。如果您願意,請繼續提交此答案作爲答案。感謝Morten Mertner。 – nav

+0

謝謝,只是很高興有幫助。 –

回答

1

延遲加載可能被禁用,因爲您已將ProxyCreationEnabled設置爲false。您需要刪除該行或急於加載相關信息。