gpt4 book ai didi

entity-framework - 使用 AddRange 方法添加实体不会刷新实体 ID

转载 作者:行者123 更新时间:2023-12-03 17:27:54 25 4
gpt4 key购买 nike

我正在使用 EF Core 1.1.1 .我在添加 IEnumerable<Entity> 时注意到了使用 AddRange方法然后调用 SaveChanges()然后实体将保存在数据库中,但它们的 ID 不会刷新。

下面的代码 SaveChanges() 后刷新 ID。请注意,我将请求作为 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;
}
}

下面的代码 SaveChanges() 后刷新 ID。注意我正在通过 request.ToList()作为 AddRange 的参数方法
    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;
}
}

下面的代码 SaveChanges() 后刷新 ID。请注意,我正在调用 ToList()选择值后。
    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;
}
}

我不确定这是 EF 中的错误还是它应该如何工作。我明白 IEnumerablelazyListArrayeager ,但如果 AddRange方法正在服用 IEnumerable作为参数,无论如何它都应该工作。

最佳答案

正如 Ivan 所说,您没有看到 id 的原因是在非工作情况下您正在枚举新的测试对象。
如果在可枚举中放置一个断点,您将看到在 for each 期间它会在那时创建新的 Test 对象。这些不是放在数据库中的相同对象。
你实际上是在枚举 IEnumerable 两次

public async Task Post([FromBody]IEnumerable<string> values)
{
var requests = values.Select(x => {

//place break point here
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;
}
}

关于entity-framework - 使用 AddRange 方法添加实体不会刷新实体 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43147035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com