.net-core - 为什么我的验证器无法捕获必填字段错误
问题描述
我需要在保存时将任何空文本字段更改为空字符串。在我下面基于这篇文章的代码中,即使实体中有一些空字符串,它也会Validator.TryValidateObject()
返回。true
然后dbContext.SaveChanges()
抛出Microsoft.EntityFrameworkCore.DbUpdateException
带有内部SqlException
语句“无法将值 NULL 插入 X 列”的a。
为什么Validator.TryValidateObject()
没有抓住这个null
专栏,我该如何解决?
捕捉SqlException
很尴尬,因为很难找出是哪一列null
,更不用说try-catch
.
public static void SaveChangesWithEmptyStrings(this DbContext dbContext) {
var entities =
from e in dbContext.ChangeTracker.Entries()
where e.State == EntityState.Added
|| e.State == EntityState.Modified
select e.Entity;
foreach (var entity in entities) {
var validationContext = new ValidationContext(entity);
List<ValidationResult> results = new List<ValidationResult>();
if (Validator.TryValidateObject(entity, validationContext, results))
continue;
foreach (ValidationResult result in results)
if (result.ErrorMessage.Contains("Cannot insert the value NULL"))
foreach (string name in result.MemberNames)
// Code to set the column to an empty string
}
dbContext.SaveChanges();
}
解决方案
推荐阅读
- servicestack - 如何正确使用 ServiceStack IServiceGateway 方法?
- node.js - 尝试下载容器文件时出现“{“message”:“标题 \"Content-Type\""} 的无效值 \"undefined\" 错误
- robotframework - 有没有一种方法可以在循环中创建测试?这样我们就可以根据文件中的输入数据创建测试
- c++ - 堆栈弹出给出段错误
- python - Python Selenium 查找元素
- scala - 如果选项类型为 None (Scala),则使用 getOrElse 不返回任何内容
- java - api 无法将跟踪发送到 docker 容器中的 aws-xray 守护进程
- android - 您如何实现 LintFix 以在 Android 中为类定义添加缺少的注释
- reactjs - gatsby ssr - 在其他插件之前将脚本添加到标题
- python - 如何从 AzureML 中的训练脚本访问 Workspace 对象?