在EF Core中添加或更新实体

阿里·雷扎·贝吉(AliReza Beigy)

我有一个具有递归关系的实体,例如:

public class Message {
   [Key]
   public int MessageId { get; set; }

   public int? ReplyToMessageId { get; set; }

   public Message ReplyToMessage { get; set; }

   public ICollection<Message> ReplyMessages { get; set; }
}

JSON数据: { "messages": [ { "id": 1, "reply_to": null, "replied_messages": [ { "id": 2, "reply_to": 1, "replied_messages": [] }, { "id": 3, "reply_to": 1, "replied_messages": [] } ] } ] }

我创建了一个message(id 1)实例,并从JSON数据中回复了message(id 2,3,4),并将回复(id 2,3,4)添加到message(id 1)中,作为ReplyMessages以及该message (ID 1)已存在于数据库中

我需要添加或更新方法来保存消息,所以我编写了以下代码:

public void AddOrUpdate(Message message) {
  if(Context.Messages.Any(m => m.MessageId == message.MessageId))
    Context.Messages.Update(message);
  else
    Context.Messages.Add(message);
    Context.SaveChanges();
}

当我传递现有消息以及新回复的消息的集合时,此方法将成为异常

数据库操作预期会影响1行,但实际上会影响0行。自加载实体以来,数据可能已被修改或删除。

我测试BulkMergeEntity Framework Extensions库的方法,它的工作正常,但是我正在寻找一种具有ef核心且没有任何扩展的解决方案

更多信息:

Database Provider: Postgresql
EF Core Version: 5.0.2
巴图汉

看来是ef核心追踪问题。如果您添加AsNoTracking()query本地或全局,则评论可以解决问题。

同样,在不更改跟踪行为的情况下,您可以尝试以下操作:

context.Entry(Message).CurrentValues.SetValues(changed_message_model);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ef中更新实体

来自分类Dev

在ef中更新实体

来自分类Dev

在EF中插入/更新实体?

来自分类Dev

EF Core:更新实体而不先查询

来自分类Dev

以1:1关系更新EF中的实体

来自分类Dev

EF Core:更新对象图重复子实体

来自分类Dev

EF Core 更新无法跟踪实体类型“广告”的实例

来自分类Dev

更新 ContextModelSnapshot EF Core

来自分类Dev

EF Core - 实体映射配置

来自分类Dev

使用 EF 异常更新实体

来自分类Dev

如何在EF中包含的实体中添加where子句?

来自分类Dev

EF:在DbSet中添加实体的结果中包含导航属性

来自分类Dev

如何使用EF Core中的DbContext基类访问实体?

来自分类Dev

EF Core 3.0:实体中的多个导航属性

来自分类Dev

软删除EF Core中的嵌套实体

来自分类Dev

对EF Core中的所有实体运行查询

来自分类Dev

从 EF Core 中的子实体获取最大值

来自分类Dev

在EF 6中更新子实体的正确方法是什么?

来自分类Dev

如何在EF中更新相关实体(代码优先)

来自分类Dev

在EF6中更新实体会产生主键异常

来自分类Dev

更新 EF6 中的实体子集合

来自分类Dev

EF中的通用实体映射

来自分类Dev

EF Core中的IsNumeric

来自分类Dev

只读表/实体EF Core 3.0

来自分类Dev

EF Core 访问嵌套嵌套实体

来自分类Dev

使用已经存在的 EF 更新父实体

来自分类Dev

EF Core 3.1在添加新实体时重新插入现有导航属性

来自分类Dev

EF Core 不允许我添加多个相同类型的新实体

来自分类Dev

EF Core:“更新”列仅适用于断开连接的实体的修改属性