将克隆的EF实体保存到DB的问题

时间:2011-02-26 08:45:38

标签: entity-framework entity save clone

我已成功使用序列化和反序列化克隆EF实体。如果我将EntityKey设置为空,我可以将它添加到上下文中。但是当我尝试SaveChanges时,我得到一个错误,说主键必须是唯一的。这是有道理的,因为克隆具有相同的密钥。所以我需要事先改变它。

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

如果我设置了NewEntity.ID = 30804328或某个任意(未使用)的数字,它将保存到DB。但是每次我想要克隆实体时,我都非常不清楚地查询未使用的ID值。

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

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

2 个答案:

答案 0 :(得分:3)

这也包括在内:Cloning data on Entity Framework

如果看起来像以下代码:

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

答案 1 :(得分:1)

我最终找到了解决方案。问题是所涉及的表具有主键标识但未设置自动增量。看来虽然在创建新实体时默认情况下ID键为零,并且无法通过赋值更改,但在设置了自动增量的情况下会自动分配。但很明显,如果未设置自动增量(或计算),则无法自动解决此问题。