【问题标题】:Integer Validation in Entity Framework实体框架中的整数验证
【发布时间】:2026-02-19 10:15:01
【问题描述】:

我正在尝试使用 DBContext 来自动验证我的实体并在屏幕上显示一条消息。获取验证错误成功检测到字符串类型的所有不可为空的属性,因为它们仍然具有 null 值。当我尝试验证 int 类型的属性时,我的问题就出现了。默认情况下,该值已设置为 0,并且由于它是外键 id,因此我需要此值不为 0,但不会被检测到。

        //Create a database context over current ObjectContext          
        var databaseContext = new DbContext(this, true);

        //Get Validation Errors
        var errors = databaseContext.GetValidationErrors();

        //Display errors on screen
        if (errors.Any())
        {
            var errorList = new StringBuilder();

            foreach (var error in errors)
            {
                foreach (var validationError in error.ValidationErrors)
                {
                    errorList.AppendLine(validationError.ErrorMessage);
                }
            }

            var vm = IoC.Get<ModalConfirmationViewModel>();
            vm.Message = errorList.ToString();

            var wm = IoC.Get<WindowManager>();
            wm.ShowDialog(vm);

            return false;
        }

想法?

谢谢 本

【问题讨论】:

    标签: c# entity-framework validation


    【解决方案1】:

    您可以使用 Range 来验证属性是否在特定范围内:

     [Range(1, int.MaxValue, ErrorMessageResourceName = "BarIdMustBeGreaterThanZero",
            ErrorMessageResourceType = typeof (Resources))]
     int BarId{ get; set; }
    

    【讨论】:

      【解决方案2】:

      尝试将其设为可为空的 int。

      public class Foo
      {
          [Key]
          public int Id { get; set; }
      
          [Required]
          public int? BarId { get; set; }
      
          public virtual Bar Bar { get; set; }
      }
      

      【讨论】:

      • 每次生成 edmx 时都会在实体上自动设置属性。据我所知,我无法手动设置它们。