應用程序版本:的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);
});
@SamiKuhmonen實際上,它的確如此。 例子: http://stackoverflow.com/questions/3356541/entity-framework-linq-query-include-multiple-children-entities –
@GertArnold它會工作,如果我有一對一的關係 –
@GertArnold的「第一「include是一個列表,所以第二個include不能是」thenInclude「,一旦你嘗試使用lambda表達式,它會出現」lists選項「。請嘗試編碼,你會更好地理解。 (使用asp網絡核心,否則,是的,這是可能的) –