У меня есть требование изменить любые пустые текстовые поля на пустые строки при сохранении. В моем коде ниже, который основан на этой записи , Validator.TryValidateObject()
возвращает true
, даже если в сущности есть несколько нулевых строк. Затем dbContext.SaveChanges()
выдает Microsoft.EntityFrameworkCore.DbUpdateException
с внутренним значением SqlException
, говорящим «Невозможно вставить значение NULL в столбец X».
Почему 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();
}