EF Core:添加对象以设置现有子对象会导致重复键异常

问题描述 投票:0回答:1

我有这些型号:

public class A
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public B Child { get; set; }
}

public class B
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

我正在反序列化这种格式的 JSON 对象:

{
    name: "Test",
    child: {
        id: "1231313131"
    }
}

该对象是要插入的新记录,但子对象已经存在并且我有它的 ID。

我现在正在做

DbContext.Set.Add(deserializedObject)

但是 EF Core 正在尝试将我的子对象再次插入数据库。

如何在不先从数据库中获取现有子对象的情况下停止此行为?我们有几个这样的实例,希望以通用的方式修复它

entity-framework-core
1个回答
0
投票

如果实体已生成密钥,请使用 UpdateAttach 而不是添加。添加会附加处于已添加状态的所有可访问对象。

另一方面,

Attach
Update
检查主键值以确定对象是新的还是现有的。

正如文档所解释的,对于

Attach
:

对于具有生成键的实体类型,如果实体设置了主键值,那么它将在 Unchanged 状态下进行跟踪。如果未设置主键值,则会在“已添加”状态下进行跟踪。

对于

Update

对于具有生成键的实体类型,如果实体设置了主键值,那么它将在 Modified 状态下进行跟踪。如果未设置主键值,则会在“已添加”状态下进行跟踪。

您可能需要的是:

myContext.Orders.Attach(orderWithProduct);
© www.soinside.com 2019 - 2024. All rights reserved.