在域上创建新实例,但在Entity Framework的数据库中存在

时间:2015-08-27 11:16:16

标签: c# entity-framework-6

我正在尝试创建我的域模型的新实例,可以将其添加或更新到数据库中。我们的想法是执行一些验证,并检查此实体是否会为更新或db中的新记录提供原点。下面的代码描述了我在做什么:

DbContext db = new DbContext();
MyEntity newEntity = new MyEntity();
newEntity.SomeField = ""; //some changes in the entity
...


MyEntity oldEntity = db.MyEntity.Find(someId);
if(oldEntity == null)
{
    db.MyEntity.Add(newEntity);
    db.SaveChanges();
}
else 
{
    newEntity.Id = oldEntity.Id; //giving the Id of the old entity, in order to update
    db.MyEntity.Attach(newEntity); //ERROR
    db.Entry(newEntity).State = EntityState.Modified;
    db.SaveChanges();
}

如果我尝试添加,则没有任何问题,但如果我尝试更新它,则会收到以下错误消息:

附加类型的实体失败,因为同一类型的另一个实体已具有相同的主键值。

我在这里缺少什么?如何更新数据库中的newEntity? (如果有可能的话,给定这些条件)

1 个答案:

答案 0 :(得分:1)


您可以尝试这样的事情:

 private void Save(User newEntity,int someId)
    {
        InteractionsDBContext db = new InteractionsDBContext();            


        EntityFramework.User oldEntity = db.Users.Find(someId);
        if (oldEntity == null)
        {
            db.Users.Add(newEntity);
            db.SaveChanges();
        }
        else
        {                
            newEntity.UserId = oldEntity.UserId; //giving the Id of the old entity, in order to update
            db.Entry(oldEntity).State = EntityState.Detached;
            db.Users.Attach(newEntity); 
            db.Entry(newEntity).State = EntityState.Modified;
            db.SaveChanges();
        }
    }