我有这些型号:
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 正在尝试将我的子对象再次插入数据库。
如何在不先从数据库中获取现有子对象的情况下停止此行为?我们有几个这样的实例,希望以通用的方式修复它
如果实体已生成密钥,请使用 Update 或 Attach 而不是添加。添加会附加处于已添加状态的所有可访问对象。
另一方面,Attach
和 Update
检查主键值以确定对象是新的还是现有的。
正如文档所解释的,对于
Attach
:
对于具有生成键的实体类型,如果实体设置了主键值,那么它将在 Unchanged 状态下进行跟踪。如果未设置主键值,则会在“已添加”状态下进行跟踪。
对于
Update
:
对于具有生成键的实体类型,如果实体设置了主键值,那么它将在 Modified 状态下进行跟踪。如果未设置主键值,则会在“已添加”状态下进行跟踪。
您可能需要的是:
myContext.Orders.Attach(orderWithProduct);