Adding entities using AddRange method does not refresh entity ID

旧时模样 提交于 2019-12-22 05:26:15

问题


I am using EF Core 1.1.1. I have noticed when i add IEnumerable<Entity> using AddRange method and then call SaveChanges() then entities gets saved in the database however their ID does not get refreshed.

Code below does not refresh ID after SaveChanges(). Note i am passing requests as IEnumerable

    public async Task Post([FromBody]IEnumerable<string> values)
    {
        var requests = values.Select(x => new Test()
        {
            Name = x,
            Status = "Init"
        });

        await _dbContext.Tests.AddRangeAsync(requests).ConfigureAwait(false);
        await _dbContext.SaveChangesAsync().ConfigureAwait(false);

        foreach (var r in requests)
        {
            var id = r.ID;
        }
    }

Code below does not refresh ID after SaveChanges(). Note i am passing request.ToList() as a parameter to AddRange method

    public async Task Post([FromBody]IEnumerable<string> values)
    {
        var requests = values.Select(x => new Test()
        {
            Name = x,
            Status = "Init"
        });

        await _dbContext.Tests.AddRangeAsync(requests.ToList()).ConfigureAwait(false);
        await _dbContext.SaveChangesAsync().ConfigureAwait(false);

        foreach (var r in requests)
        {
            var id = r.ID;
        }
    }

Code below does refresh ID after SaveChanges(). Note I am calling ToList() after selecting values.

    public async Task Post([FromBody]IEnumerable<string> values)
    {
        var requests = values.Select(x => new Test()
        {
            Name = x,
            Status = "Init"
        }).ToList();   //<------ ToList() or ToArray() would work

        await _dbContext.Tests.AddRangeAsync(requests).ConfigureAwait(false);
        await _dbContext.SaveChangesAsync().ConfigureAwait(false);

        foreach (var r in requests)
        {
            var id = r.ID;
        }
    }

I am not sure if this is a bug in EF or this is how it supposed to work. I understand IEnumerable is lazy and List and Array are eager, but if AddRange method is taking IEnumerable as parameter then it should work regardless.

来源:https://stackoverflow.com/questions/43147035/adding-entities-using-addrange-method-does-not-refresh-entity-id

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!