【发布时间】:2020-08-21 21:19:12
【问题描述】:
我正在测试一个我试图保存重复元素的场景,它向我显示以下错误,因为该元素必须是唯一的(我的表的名称和字段是西班牙语,对于我的代码示例,我最好用英文写):
`Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details.
---> Microsoft.Data.SqlClient.SqlException (0x80131904): Cannot insert duplicate key row in object 'dbo.Generos' with unique index 'IX_Generos_Nombre'.` **The duplicate key value is (Terror).**`
The statement has been terminated.
at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__164_0(Task`1 result)
at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.Tasks.Task.<>c.<.cctor>b__274_0(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location where exception was thrown ---`
如果有任何错误要保存,我想这样做,我可以自定义输出消息而不显示错误消息。
我也不明白为什么result 变量被视为int。
[HttpPost] // I am sending { Nombre: 'Terror'}
public async Task<ActionResult> Post([FromBody] GenreCreationDTO genreCreationDTO)
{
var entity = mapper.Map<Genre>(genreCreationDTO);
context.Add(entity);
var result = await context.SaveChangesAsync(); ///////////////////// problem in this line
//result is taken as int, why?
if (!result)
{
//show my custom message
}
return Ok();
}
【问题讨论】:
-
@GSerg 是唯一的方法吗?我是 c# 的新手,我认为还有另一种方法。当我遇到与数据库相关的某种问题时,您建议放置哪种异常?
-
SaveChangesAsync方法返回受影响的行数。 -
我猜你的 GenreCreationDTO 类和 Genre 类中都有一个 Id 属性。如果这是例如一个 int 或 long 且 value > 0,这将提示您下一步该做什么。
标签: c# entity-framework