我正在使用实体框架更新记录
用户(父级( | 电子邮件(子级( | |
---|---|---|
用户ID | 电子邮件ID | |
用户名 | UserId | |
电子邮件地址 |
问题是有两个不同的User
实例指向同一个UserId
。
作为一种变通方法,您可能会执行以下操作:
private async Task updateUser(User _user) {
var user = _configurationDbContext.Users
.Include(x => x.Emails)
.Where(x => x.UserId == _user.UserId)
.FirstOrDefault();
_configurationDbContext.Entry(_user).State = EntityState.Detached;
user.Emails.RemoveAll(x => x.UserId == _user.Id);
_configurationDbContext.Users.Update(user);
return await _configurationDbContext.SaveChangesAsync();
}
注意,调用_configurationDbContext.Entry(_user).State = EntityState.Detached;
后,EF将不再自动跟踪对_user
的更改
试试这个:
var user = _configurationDbContext.Users
.Include(x => x.Emails)
.Where(x => x.UserId == _user.UserId)
.FirstOrDefault();
user.Emails.RemoveAll(x => x.UserId == _user.Id);
// or you can try
user.Emails.Clear();
_configurationDbContext.Entry(user).CurrentValues.SetValues(_user);
return await _configurationDbContext.SaveChangesAsync()