在实体框架中更新/删除子集合

时间:2021-05-18 12:41:15

标签: entity-framework entity-framework-core blazor


我正在使用 Blazor WASM 托管解决方案运行 Entity Framework Core。我有一个如下所示的模型:

public class Parent
{
    public int ParentID { get; set; }
    public List<Child> Children { get; set; }
}

客户端 Blazor 正在通过 API 调用获取父对象,正在修改列表以从其列表中添加/删除项目,然后被发送回 API 进行更新/保存。

public async Task UpdateAsync(int id, Parent Parent)
        {
            try
            {
                if (!await ExistsAsync(id))
                    return;

                _dataContext.Entry(Parent).State = EntityState.Modified;
                await _dataContext.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error in UpdateAsync()");
                throw;
            }
        }

上面的代码不会更新 Child 的集合,因此下次调用 Get 时,就像更新之前一样。在做了一些研究之后,我可以看到如果对象通过 API 被序列化和反序列化,EF 无法跟踪更改。我尝试了以下

public async Task UpdateAsync(int id, Parent Parent)
        {
            try
            {
                if (!await ExistsAsync(id))
                    return;

                //_dataContext.Entry(Parent).State = EntityState.Modified;
                _dataContext.Parents.Update(Parent);
                await _dataContext.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error in UpdateAsync()");
                throw;
            }
        }

通过此更改,我可以向集合中添加新项目并正确保存,但是从集合中删除项目不起作用。

我找到了这个手动跟踪子属性添加和删除的答案,但这已经是 6 年前的事情了。我希望 EF 从那时起就发生了变化,可能会支持这一点。

How to add/update child entities when updating a parent entity in EF

0 个答案:

没有答案