CreatedAtAction 之后使用 _context.AddRange() 进行 ECONNRESET - EF 2.0

Mat*_*rda 4 c# asp.net-mvc entity-framework-core asp.net-core-2.0

在更改我的控制器以通过_context.AddRange(). 之前我是通过添加数据的_context.Entity.Add(),没问题。

我更改了插入方法,以便能够将 Lista(列表)实体添加到数据库,同时还将 n 个 Pessoa(人)实体和 n 个关系(列表 x 人)的列表插入到数据库。

尽管邮递员仍然“无法得到任何回复”,但插入全部成功。

知道为什么会发生这种情况吗?

    public async Task<IActionResult> PostListas(ListaFileInput input)
    {
        ...
        Listas lista = new Listas
        {
            OwnerId = userId,
            Lista = input.Lista
        };
        ...
        List<Pessoas> pessoas = csv.GetRecords<Pessoas>().ToList();
        foreach (Pessoas pessoa in pessoas)
        {
            pessoa.OwnerId = userId;
            _context.AddRange(new ListasXPessoas() { Lista = lista, Pessoa = pessoa });
        }

        await _context.SaveChangesAsync();

        return CreatedAtAction("GetListas", new { id = lista.ListaId }, lista);
Run Code Online (Sandbox Code Playgroud)

Mat*_*rda 5

ECONNRESET 是一个很好的指示器,表明在执行离开控制器后抛出了一些异常。检查输出窗口,我发现异常是:

检测到自引用循环

后来我发现这是由于返回对象序列化为JSON造成的。

最终通过添加以下代码忽略循环验证解决:

services.AddMvc().AddJsonOptions(opt => 
    opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore);
Run Code Online (Sandbox Code Playgroud)