【问题标题】:Clone an EF6 record with relations克隆具有关系的 EF6 记录
【发布时间】:2016-12-06 19:42:28
【问题描述】:

我正在使用

从 EF6 获取记录
Context
.MyRepo
.Include(p => p.MyRelation)
.AsNoTracking()
.SingleOrDefault(p => p.Uuid == recordUuid);

然后我尝试插入记录zith的副本

myRecord.Uuid = Guid.NewGuid();
myRecord.EntityKey = new System.Data.EntityKey("modelqualifiedname", "Id", 1726526);

Context.MyRepo.AddObject(myRecord);
Context.SaveChanges();

但是这个消息失败了

"ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同的多个对象 键。”

我尝试将EntityKey 设置为null,就像在新记录中一样;但它没有帮助。有什么想法吗?

【问题讨论】:

  • 这听起来像是他们在某个地方的重复 PK。您是否尝试过在您的数据库中按 1726526 键执行 where 子句?
  • 是的;数据库中现有的最高密钥是 101626
  • 我认为由于子对象而出现错误,您应该尝试为每个子对象设置一个新键。
  • @hazimdikenli 让它成为答案,我会批准它

标签: c# entity-framework


【解决方案1】:

此对象已被 EF 跟踪。

您必须修改其密钥或将其状态更改为已修改。

Context.MyRepo.Entry(myRecord).State = EntityState.Modified;

然后保存。

【讨论】:

    【解决方案2】:

    我认为由于子对象而出现错误,您应该尝试为每个子对象设置一个新键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      相关资源
      最近更新 更多