2017-03-23 40 views
0

應用程序版本:的EntityFramework核心 - 多對多 - 屬性表達式無效

ASP網核心1.1

EF:Microsoft.EntityFrameworkCore(1.1.1)

線:

_dbContext.MyTable1.Include(C => c.MyIntermediateTable).ThenInclude(K => k.Select(X => x.MyTable2))ToList();

例外:

的屬性表達式數k => {從MyIntermediateTable X在k-選擇 [X] .MyTable2}「是無效的。該表達式應代表 屬性訪問:'t => t.MyProperty'。有關 包括相關數據

我的實體

[Table("MyTable1")] 
public class MyTable1 
{ 
    public MyTable1() 
    { 
     MyIntermediateTable = new List<MyIntermediateTable>(); 
    } 

    [Column("MyPK1")] 
    public int MyPK1 { get; set; } 
    public string Name{ get; set; } 

    public virtual List<MyIntermediateTable> MyIntermediateTable{ get; set; } 
} 

[Table("MyIntermediateTable")] 
public class MyIntermediateTable 
{ 

    public int MyPK1 { get; set; } 
    public int MyPK2 { get; set; } 
    public virtual MyTable1 MyTable1 { get; set; } 
    public virtual MyTable2 MyTable2 { get; set; } 
} 

[Table("MyTable2")] 
public class MyTable2 
{ 
    public MyTable2() 
    { 
     MyIntermediateTable = new List<MyIntermediateTable>(); 
    } 

    [Column("MyPK2")] 
    public int MyPK2 { get; set; } 
    public string Name{ get; set; } 

    public virtual List<MyIntermediateTable> MyIntermediateTable{ get; set; } 

} 

模型構造器(流利API)的更多信息

 modelBuilder.Entity<MyIntermediateTable>((item) => 
     { 
      item.HasKey(p => new { p.MyPK1, p.MyPK2 }); 
      item.HasOne(u => u.MyTable1).WithMany(u => u.MyIntermediateTable).HasForeignKey(u => u.MyPK1); 
      item.HasOne(u => u.MyTable2).WithMany(u => u.MyIntermediateTable).HasForeignKey(u => u.MyPK2); 
     }); 

     modelBuilder.Entity<MyTable1>((item) => 
     { 
      item.HasKey(p => p.MyPK1); 
      item.HasMany(u => u.MyIntermediateTable).WithOne(u => u.MyTable1).HasForeignKey(u => u.MyPK1); 
     }); 

     modelBuilder.Entity<MyTable2>((item) => 
     { 
      item.HasKey(p => p.MyPK2); 
      item.HasMany(u => u.MyIntermediateTable).WithOne(u => u.MyTable2).HasForeignKey(u => u.MyPK2); 
     }); 
+0

@SamiKuhmonen實際上,它的確如此。 例子: http://stackoverflow.com/questions/3356541/entity-framework-linq-query-include-multiple-children-entities –

+0

@GertArnold它會工作,如果我有一對一的關係 –

+0

@GertArnold的「第一「include是一個列表,所以第二個include不能是」thenInclude「,一旦你嘗試使用lambda表達式,它會出現」lists選項「。請嘗試編碼,你會更好地理解。 (使用asp網絡核心,否則,是的,這是可能的) –

回答

1

智能感知在Visual Studio中只會顯示你的在進行自動競爭時列出屬性。

這是一個錯誤(或者智能感知在寫入時不能處理的事情),當有兩個過載符合簽名時會發生這種錯誤:一個用於T其他用於IEnumerable<T>

當出現這種情況時,即使智能感知不會顯示您MyProperty,只需鍵入.ThenInclude(m => m.MyProperty),即可忽略IDE顯示的任何錯誤。

一旦關閉了方法括號,錯誤就會消失。