首页 > 解决方案 > 为什么我的验证器无法捕获必填字段错误

问题描述

我需要在保存时将任何空文本字段更改为空字符串。在我下面基于这篇文章的代码中,即使实体中有一些空字符串,它也会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();
}

标签: .net-coreentity-framework-core

解决方案


推荐阅读