使用Include进行急切加载不会显示所有记录,但会显示一个记录

时间:2019-07-17 11:46:48

标签: entity-framework asp.net-core entity-framework-core asp.net-core-webapi

我在WebAPI项目中使用的是EF Core和DB first方法。

我为StoreLocation使用了以下自动生成的模型类:

 public partial class StoreLocation
{
    public StoreLocation()
    {
        Sales = new HashSet<Sales>();
    }

    public int Id { get; set; }
    public string LocationName { get; set; }
    public string Description { get; set; }
    public int? NumberOfStaff { get; set; }

    public ICollection<Sales> Sales { get; set; }
}

和销售类:

public partial class Sales
{
    public int Id { get; set; }
    public decimal? SalesPrice { get; set; }
    public string ProductType { get; set; }
    public int? StoreLocation { get; set; }

}

然后,我有一种方法可以根据ID及其所有销售情况获取StoreLocation,

        [HttpGet("StoreWithSales/{id}")]
    public async Task<ActionResult<IEnumerable<StoreLocation>>> GetStoreWithSales(int id)
    {

        return await _context.StoreLocation.Where(s => s.Id == id).Include(store => store.Sales).ToListAsync();
    }

我通过使用Include()使用预先加载。我的问题是,当我运行api并触发此调用时,我只会得到没有结尾“]”的第一项

从浏览器中查看我的结果:

[{"id":1,"locationName":"Copenhagen","description":"Assimilated multi-tasking secured line","numberOfStaff":2,"sales":[{"id":2,"salesPrice":47.80,"productType":"Socks","storeLocation":1

其余部分丢失了,为什么在哪里?当我尝试调试时,我可以看到所有销售记录实际上都已加载,但未在浏览器中返回。感谢您的提示!

编辑:

当我尝试在邮递员中触发此特定呼叫时,我得到:Could not get any response

在我用https://localhost:XXXXX/api/sales/storeWithSales/2测试的浏览器中,有时显示我上面发布的内容,有时浏览器页面为空白。在控制台中,出现以下错误:Failed to load resource: net::ERR_SPDY_PROTOCOL_ERROR

其他GET调用,其中我只是简单地从表工作中检索所有值,并且没有出现来自控制台的上述错误。我在Chrome和IE 11中尝试过

编辑2:在Firefox中,我得到了这个信息:SyntaxError: JSON.parse: end of data after property value in object at line 1 column 173 of the JSON data API response,因此服务器似乎生成了语法错误的json?

1 个答案:

答案 0 :(得分:1)

似乎JSON被截断了,请尝试忽略如下所示的引用循环

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
    .AddJsonOptions(
        options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
    );
}

请参阅https://github.com/dotnet/core/issues/1240