如何解决在Entity Framework 6中更新多2多次关系会将新项插入数据库
我正在尝试使用下面的功能来更新数据库条目,包括多对多关系。但是,即使对象的ID字段设置为数据库中现有TiMetable的ID,下面的代码也会向数据库中插入新的TiMetable条目。我已经阅读了有关attach方法的信息,但是当我尝试进行附加操作时,我收到错误消息:“由于时间表的另一个类型相同的实体已经具有相同的主键值,所以附加了类型为Table的实体失败”。
public void UpdatePersonGroup(PersonGroup pg)
{
PersonGroup pgorg = this.DB.PersonGroups.Where(b => b.Id == pg.Id).Include(i => i.TiMetables).FirstOrDefault();
if (pgorg == null)
return;
pgorg.Name = pg.Name;
pgorg.Detail = pg.Detail;
pgorg.Fee = pg.Fee;
pgorg.TiMetables.Clear();
foreach (var tt in pg.TiMetables)
{
//var query = this.DB.TiMetables.Where(i => i.Id == tt.Id).FirstOrDefault();
//this.DB.TiMetables.Attach(tt);
pgorg.TiMetables.Add(tt);
}
this.DB.SaveChanges();
}
如果我首先像这样从数据库中获取时间表项,一切都会按预期进行,
var query = this.DB.TiMetables.Where(i => i.Id == tt.Id).FirstOrDefault();
但是,这导致对数据库的多个请求。
解决方法
执行此操作:
DB.PersonGroups.Update(pgorg);
而不是 foreach循环。
使用“添加”时,它会指示EF创建新项目。 还有UpdateRange来更新项目集合
编辑:我对EF版本感到困惑,更新方法在EF Core中。在EF 6中,无需“添加”或“更新”,只需执行“ SaveChanges”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。