Entity framework 将克隆的EF实体保存到数据库时出现问题

Entity framework 将克隆的EF实体保存到数据库时出现问题,entity-framework,entity,save,clone,Entity Framework,Entity,Save,Clone,我已经成功地使用序列化和反序列化克隆了EF实体。如果将EntityKey设置为nothing,则可以将其添加到上下文中。但是当我试图保存更改时,我得到一个错误,即主键必须是唯一的。这是有意义的,因为克隆具有相同的密钥。所以我需要事先更改它 但是主键在插入时由DB(SQLite)自动分配,并且由于PK不可为空,我无法设置NewEntity.ID=Nothing,我认为这会告诉上下文,该实体在插入之前应该接收临时键 如果我设置NewEntity.ID=30804328或某个任意(未使用的)数字,它将

我已经成功地使用序列化和反序列化克隆了EF实体。如果将EntityKey设置为nothing,则可以将其添加到上下文中。但是当我试图保存更改时,我得到一个错误,即主键必须是唯一的。这是有意义的,因为克隆具有相同的密钥。所以我需要事先更改它

但是主键在插入时由DB(SQLite)自动分配,并且由于PK不可为空,我无法设置NewEntity.ID=Nothing,我认为这会告诉上下文,该实体在插入之前应该接收临时键

如果我设置NewEntity.ID=30804328或某个任意(未使用的)数字,它将保存为DB fine。但是,每次我想克隆一个实体时,我都不会查询一个未使用的ID值

我知道上下文在“AddObject”时会将分离的实体视为新实体,并为其分配一个临时键,以便DB可以进行分配,然后上下文将接收更新。不是这样吗


我如何解决这个问题?谢谢你的建议

这里也介绍了这一点:

如图所示,下面的代码是正确的选择:

  context.Detach(entity);      
  entityCollection.Add(entity);
  context.SaveChanges(); // New id will be assigned here

我终于找到了解决办法。问题是所涉及的表具有主键标识,但未设置Autoincrement。虽然在创建新实体时,ID键默认为零,并且不能通过赋值进行更改,但在设置了Autoincrement的情况下,它是自动赋值的。但显然,如果未设置自动增量(或计算),则无法自动解决此问题。

谢谢您的回复。我尝试了序列化方法和链接中提供的其他代码。我的问题不在于克隆过程,也不在于调用AddObject;这是对数据库的插入。上下文没有指定临时关键点,而是保留原始关键点,它们在插入时发生冲突。我无法将密钥设置为Nothing,因为PK不可为null。