2012-01-22 72 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; }