我正在尝试创建我的域模型的新实例,可以将其添加或更新到数据库中。我们的想法是执行一些验证,并检查此实体是否会为更新或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
? (如果有可能的话,给定这些条件)
答案 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();
}
}