将 UNIQUE 约束的异常发送到 .NET 核心中的 UI
Send exception for UNIQUE constraint to UI in .NET core
当出现唯一约束异常时,.NET Core中如何消息UI;我要returnJSON,而不是MVC/Razor方法。
我想你一直在看我的文章Catching Bad Data in Entity Framework。在那里,我描述了一种捕获 SQL 错误并将其转化为 EF Core 验证错误的方法。
更新
为了回答您的后续问题,我可以向您指出与我正在写的书相关的代码,Entity Framework Core in Action。在此我构建了一个名为 SaveChangesSqlCheck
的方法,其中包含检查 sql 错误的代码。您将使用此方法而不是调用 SaveChanges
,它将 return 一个 ValidationResult
.
我的书与 git repository 相关联,其中我对书中展示的几乎所有内容进行了单元测试。下面是指向单元测试的链接,以查看您如何调用 SaveChangesSqlCheck
,然后是 SaveChangesSqlCheck
代码本身。
- 单元测试:https://github.com/JonPSmith/EfCoreInAction/blob/Chapter10/Test/UnitTests/DataLayer/Ch10_CatchSqlError.cs#L59-L89
SaveChangesSqlCheck
代码:https://github.com/JonPSmith/EfCoreInAction/blob/Chapter10/DataLayer/EfCode/SaveChangesSqlCheck.cs
- 捕获Unique错误的方法:https://github.com/JonPSmith/EfCoreInAction/blob/Chapter10/DataLayer/EfCode/SqlErrorFormatters.cs
注意:您需要以特殊方式格式化唯一约束名称 - 请参阅 https://github.com/JonPSmith/EfCoreInAction/blob/Chapter10/Test/Chapter10Listings/EfCode/Configuration/MyUniqueConfig.cs 示例。
如果您打算使用本文中显示的代码,那么您需要做的就是使用 JsonConvert.SerializeObject(errors)
将其转换为 json。我已经包含了一些代码,因此您可以看到 json 输出的样子。
var error = new ValidationResult("error message");
var jsonList = JsonConvert.SerializeObject(error,
new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented });
此 json 输出将是
{
"MemberNames": [],
"ErrorMessage": "error message"
}
希望对您有所帮助。
当出现唯一约束异常时,.NET Core中如何消息UI;我要returnJSON,而不是MVC/Razor方法。
我想你一直在看我的文章Catching Bad Data in Entity Framework。在那里,我描述了一种捕获 SQL 错误并将其转化为 EF Core 验证错误的方法。
更新
为了回答您的后续问题,我可以向您指出与我正在写的书相关的代码,Entity Framework Core in Action。在此我构建了一个名为 SaveChangesSqlCheck
的方法,其中包含检查 sql 错误的代码。您将使用此方法而不是调用 SaveChanges
,它将 return 一个 ValidationResult
.
我的书与 git repository 相关联,其中我对书中展示的几乎所有内容进行了单元测试。下面是指向单元测试的链接,以查看您如何调用 SaveChangesSqlCheck
,然后是 SaveChangesSqlCheck
代码本身。
- 单元测试:https://github.com/JonPSmith/EfCoreInAction/blob/Chapter10/Test/UnitTests/DataLayer/Ch10_CatchSqlError.cs#L59-L89
SaveChangesSqlCheck
代码:https://github.com/JonPSmith/EfCoreInAction/blob/Chapter10/DataLayer/EfCode/SaveChangesSqlCheck.cs- 捕获Unique错误的方法:https://github.com/JonPSmith/EfCoreInAction/blob/Chapter10/DataLayer/EfCode/SqlErrorFormatters.cs
注意:您需要以特殊方式格式化唯一约束名称 - 请参阅 https://github.com/JonPSmith/EfCoreInAction/blob/Chapter10/Test/Chapter10Listings/EfCode/Configuration/MyUniqueConfig.cs 示例。
如果您打算使用本文中显示的代码,那么您需要做的就是使用 JsonConvert.SerializeObject(errors)
将其转换为 json。我已经包含了一些代码,因此您可以看到 json 输出的样子。
var error = new ValidationResult("error message");
var jsonList = JsonConvert.SerializeObject(error,
new JsonSerializerSettings { Formatting = Newtonsoft.Json.Formatting.Indented });
此 json 输出将是
{
"MemberNames": [],
"ErrorMessage": "error message"
}
希望对您有所帮助。