entityframework核心 - 多对多 - 属性表达式无效

Mar*_*him 2 c# lambda entity-framework ef-fluent-api asp.net-core

应用版本:

Asp Net Core 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 in k select [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; }

}
Run Code Online (Sandbox Code Playgroud)

模型生成器(Fluent 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);
        });
Run Code Online (Sandbox Code Playgroud)

Tse*_*eng 6

Visual Studio中的Intellisense仅在进行自动竞争时显示列表属性.

这是一个错误(或者是在编写时Intellisense无法处理的东西),当有两个与签名匹配的重载时会发生这种错误:一个用于T其他的重载IEnumerable<T>.

出现这种情况时,.ThenInclude(m => m.MyProperty)即使智能感知不会显示MyProperty,也只需输入,忽略IDE显示的任何错误.

关闭方法括号后,错误将消失.

额外的信息

此错误由此GitHub问题完成在dotnet roslyn GitHub存储库中的容错案例中缺少lambda参数的成员进行跟踪.