如何解决如何使用实体框架 6 更新具有唯一列的表条目
public class Perfil
{
[Key]
public int ID { get; set; }
public DateTime FechaCreacion { get; set; }
[Index(IsUnique = true)]
public Modelo.Enumeraciones.ERoles Rol { get; set; }
public string Descripcion { get; set; }
}
我正在尝试使用此代码仅更新一个条目:(contexto 是我的 dbContext)
public async Task<IHttpActionResult> Put(int id,[FromBody]Models.Usuarios.Perfil value)
{
if (id != value.ID) {
return InternalServerError(new Exception("id de URL: "+id+ " no coincide con el del objeto enviado en el cuerpo: " + value.ID));
}
Models.Usuarios.Perfil perfil = contexto.Perfiles.SingleOrDefault(a => a.ID == id);
if (EqualityComparer<Models.Usuarios.Perfil>.Default.Equals(perfil,default(Models.Usuarios.Perfil)))
{
return InternalServerError(new Exception("No existe un registro con id " + id + " en la tabla de perfiles."));
}
perfil.Descripcion = value.Descripcion;
perfil.Rol = value.Rol;
await contexto.SaveChangesAsync();
return Ok(id);
}
出于任何原因,我收到此错误:
System.Data.sqlClient.sqlException: Cannot insert duplicate key row in object 'dbo.Perfils' with unique index 'IX_Rol'. The duplicate key value is (3).
我知道添加的任何条目都必须具有唯一的角色。问题是我不是要插入!!,我想更新条目的 rol 和描述属性。我只用表中的一个条目来测试这个,我想更新它。
我已经测试了很多事情,例如更改条目的状态以修改或附加条目。其中一些测试在 db 中插入一个新条目,在表中给我两个条目。我不明白为什么条目没有更新。我认为这个麻烦是由于 Unique 列 Rol 引起的。
解决方法
我终于知道发生了什么。我应该在问题中告诉我这个方法是从一个单元测试项目中执行的。我按以下顺序执行:
- 发布
- 获取
- 更新
- 删除
此外,整个操作都在 [TestMethod] 内。似乎使用发布的相同对象进行放置会使实体认为有两个对象附加到它。这就是为什么一些测试给我两个插入的结果。解决方案是将 Post、Get、Update 和 Delete 拆分为一个 [TestMethod]。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。