.net core EF Core 3.1,匿名类加载子类,但命名类不在Take()之后

.net core EF Core 3.1,匿名类加载子类,但命名类不在Take()之后,.net-core,entity-framework-core,.net Core,Entity Framework Core,我注意到EF Core(至少在版本3.1.4和3.1.8中)中有一种奇怪的行为,我想知道我是否做错了什么,或者为什么会发生这种情况 当我使用Include()并选择到一个anomymous类中时,子类将按预期加载,但在select语句中使用命名类时,子类为null。只有在我执行.Take(x)之后,如果我在Take()之前枚举列表,那么差异才会发生。所有内容都将加载,但如果我不加载,则子类为null 命名类: var items = _context.TABLE.Include(a =>

我注意到EF Core(至少在版本3.1.4和3.1.8中)中有一种奇怪的行为,我想知道我是否做错了什么,或者为什么会发生这种情况

当我使用Include()并选择到一个anomymous类中时,子类将按预期加载,但在select语句中使用命名类时,子类为null。只有在我执行.Take(x)之后,如果我在Take()之前枚举列表,那么差异才会发生。所有内容都将加载,但如果我不加载,则子类为null

命名类:

var items = _context.TABLE.Include(a => a.SUBTABLE).Select(a => new NAMEDCLASS { 
    item = a,
    ...
});
public class NAMEDCLASS : IListRow<NAMEDCLASS> {
    public TABLE item { get; set; }
    ...

    public string Identifier {
        get => TABLE.guid.ToString();
    }
}
匿名类:

var items = _context.TABLE.Include(a => a.SUBTABLE).Select(a => new { 
    item = a,
    ...
});
如果我在此阶段列举,两者都是相同的。但在我跑步之后:

var pagedItems = items.Take(10);
它们开始有所不同,命名类SUBTABLE为null,而匿名类的SUBTABLE按预期加载。如果在Take()之前调试和枚举项,这两者又是相同的

指定的类:

var items = _context.TABLE.Include(a => a.SUBTABLE).Select(a => new NAMEDCLASS { 
    item = a,
    ...
});
public class NAMEDCLASS : IListRow<NAMEDCLASS> {
    public TABLE item { get; set; }
    ...

    public string Identifier {
        get => TABLE.guid.ToString();
    }
}
公共类名称类:IListRow{
公共表项{get;set;}
...
公共字符串标识符{
get=>TABLE.guid.ToString();
}
}
该接口仅标准化唯一id

public interface IListRow<T> {
    public string Identifier { get; }
}
公共接口IListRow{
公共字符串标识符{get;}
}
为什么会这样?是虫子还是我做错了什么?问题是,我使用NAMEDCLASS上的接口来执行一些过滤和其他操作,因此如果可能的话,我更愿意保留命名类


编辑以在标题中添加3.1看起来像一个bug。尝试添加AsNoTracking(),可能是Change Tracker有问题。感谢您的建议,尝试了一下,但没有什么不同。很遗憾……看起来像EFC 3.x缺陷(bug),因为在当前的EFC 5.0预览版中也可以使用。没有什么可以做的,EFC 5发布的计划将是下个月,我不认为他们将提供修复的第三XI测试矿井。它很好用。您尝试在没有IListRow和Identitifer的情况下创建另一个新类。仅使用表属性初始化。然后重新运行,看看新类是否仍然存在相同的问题。