实体框架核心奇怪的导航属性丢失

时间:2017-11-27 04:05:40

标签: c# entity-framework entity-framework-core

我正在编写一个在ASP.NET Core上使用Entity Framework Core的网站。我有一个自定义IQueryable实现来帮助处理可分页/可排序表。此自定义IQueryable的一个功能是名为WithIndices的方法,它为每个项目创建一个元组,将其与整个数据集中的索引(不仅仅是该页面上的索引)配对。

实施如下:

public IEnumerable<(int, TData)> WithIndices()
{
    int i = this.StartIndex;

    foreach (TData item in this.inner)
        yield return (i++, item);
}

TData是我称为Forum的标准模型之一时,我的数据丢失很少。 Forum有一个属性

public Forum Parent { get; set; }

一起
public int? ParentId { get; set; }

如果我以特定的方式对数据进行排序,它就可以了。但是如果我按相反顺序(升序与降序)对其进行排序,Parent属性在foreach期间以某种方式设置为空。

如果我在yield return行上为行为不端的项目设置断点,我可以检查this.inner并枚举调试器中的结果视图,使其评估查询并显示项目。 Parent属性设置正确,ParentId也是如此。但是,当我在调试器中检查item时,Parent为空(但ParentId仍然设置正确)。

什么会导致此特定实例与调试器从评估this.inner得到的实例不同?这是相同的可枚举。如果我在Watch窗口中调用this.inner.ToArray(),它也会正确设置。只是在这个foreach循环中,属性才会被取消。这是一个值得为Entity Framework记录的错误吗?

0 个答案:

没有答案