繁体   English   中英

克隆实体失败,并在SaveChanges()上违反了主键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM