2012-01-22 164 views
3

我想使用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; 
     } 

想法?

感谢 本

回答

2

尝试使其成为一个可空INT。

public class Foo 
{ 
    [Key] 
    public int Id { get; set; } 

    [Required] 
    public int? BarId { get; set; } 

    public virtual Bar Bar { get; set; } 
} 
+1

的属性上生成每次的EDMX实体自动设置。据我所知,我不能手动设置它们。 – benq143

6

您可以使用范围来验证,如果一个属性是特定范围内:

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