8

Entity Framework 5.0.0 は、int フィールドに含まれている場合に [Required] 属性を無視するようで、例外をスローする代わりに 0 値を自動的に含めます。ただし、フィールドが文字列の場合、必須属性は機能するようです。以下の単純なモデルと作成関数は、例外をスローしません。簡潔にするために、DbSet Degrees を持つ DbContext クラスは示されていません。

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
}

これは私の単純な誤解かもしれませんが、どんな考えや助けも大歓迎です。

4

2 に答える 2

17

この[Required]属性は、値が存在する必要があることを示します。aDegreeが構築されると、それが s のFieldデフォルト値であるため、0 に初期化されますint。0 は値なので、[Required]属性を満たします。

[Range]値が 0 より大きくなければならないことを指定するために、属性を試してみることができます。または、モデルを に変更して、何らかの値に初期化されない限りint?そうなるようにすることもできます。null

于 2012-10-12T22:39:18.780 に答える
7

あなたのフィールドは、int常に値を持つタイプです。Degreeクラスの新しいインスタンスを作成すると、Fieldプロパティは 0 に初期化されます。

列を null 許容にする場合は、プロパティの型を作成しますint?。null 許容型の場合、値が の場合、EF はエラーをスローしますnull

public class Degree
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Required]
    public int? Field { get; set; }
}
于 2012-10-12T22:40:09.223 に答える