我试图复制像here所述的实体。在我的entity-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
内部甚至更深层内部的东西。
但我不知道如何逃避错误。
答案 0 :(得分:0)
我怀疑数据库正在尝试生成主键,但您也在尝试在保存之前明确指定它。如果要指定标识列的值,则需要跳过一些环节(How can I force entity framework to insert identity columns?)。否则,只需不设置该值,并在执行插入时为您生成。