2012-10-12 59 views
6

實體框架5.0.0在包含在int字段中時似乎忽略[Required]屬性,並自動包含0值而不是拋出異常。如果該字段是一個字符串,但所需的屬性似乎工作。下面的簡單模型和創建函數不會引發異常。 DbSet類的DbContext類爲簡潔起見未顯示。EF 5忽略[必需的]屬性在Int類型

public class Degree 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    [Required] 
    public int Field { get; set; } 
} 


private static void CreateDegree() 
{ 
    var degree = new Degree { Name = "Mechanical Engineering" }; 
    var db = new Context(); 
    db.Degrees.Add(degree); 

    // try statement 
} 

這可能是我的一個簡單的誤解,但任何想法/幫助將不勝感激。

回答

14

[Required]屬性指示值必須存在。當構建Degree時,Field初始化爲0,因爲這是int s的默認值。由於0是一個值,因此它滿足[Required]屬性。

你可能想嘗試[Range]屬性來指定的值必須大於0或者你可以改變模型有一個int?,所以,這將是null除非它得到了初始化爲一些價值。

+0

'Int?'完美的作品。感謝您的洞察力。 – Mebourne

7

您的字段類型爲int,它將始終有一個值。當你創建Degree類的新實例,如果你想在列可爲空使財產int?的類型Field屬性將被初始化爲0

。如果值爲null,可空類型EF會拋出錯誤。

public class Degree 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    [Required] 
    public int? Field { get; set; } 
} 
+0

這工作正常,只要注意int?不能被隱式轉換爲int類型。所以你可能不得不改變一些引用Field整數的代碼。這可以在這裏處理幾種方法:http://stackoverflow.com/questions/8053698/cannot-implicitly-convert-type-in​​t-to-int –