[英]Cloning entity fails with primary-key violation on SaveChanges()
我正在尝试复制此处描述的实体。 在我的entry-wrapper基类中,我具有以下代码来复制/克隆实体。
public TBaseEntityModel Clone(TPrimaryKey newPrimaryKey)
{
var newEntity = Activator.CreateInstance<TEntity>();
var clone = DbContext.Entry(newEntity);
clone.State = EntityState.Added;
DbContext.Entry(newEntity).CurrentValues.SetValues(TheEntity);
clone.State = EntityState.Detached;
var cloneEntityModel= (TBaseEntityModel)Activator.CreateInstance(typeof(TBaseEntityModel), DbContext, newEntity);
cloneEntityModel.PrimaryKeyValue = newPrimaryKey;
return cloneEntityModel;
}
在我对具体实体调用Clone
方法之后,它的新主键也设置为给定值newPrimaryKey
。
当我在基础上下文上调用SaveChanges()
时,就会出现问题。
然后抛出:
Violation of PRIMARY KEY constraint '...'. Cannot insert duplicate key in object 'dbo....'. The duplicate key value is (553a7aa9-0ac2-40a0-820f-43a3b4af745f).
但是当我查看clone
,PK设置为另一个值。 所以我想这是在ObjectContext
内部或更深的地方。
但是我不知道如何消除错误。
我怀疑数据库正在尝试生成主键,但是您还试图在保存之前明确指定它。 如果要为标识列指定值,则需要跳过一些箍( 如何强制实体框架插入标识列? )。 否则,不要设置该值,而是在执行插入操作时会为您生成该值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.