2

EF 5.0.0、VS 2012、および .NET 4.5 を使用して、既存の SQL Server 2012 データベースから新しい ADO.NET エンティティ データ モデルを追加すると、生成されたコードは null 許容と null 非許容の varchar を区別しません。たとえば、私のデータベースでは TTITLE は null 値を許容しませんが、CITY は null 値を許容しますが、生成されたコードでは次のようになります。これにより、検証の問題が発生します。[Required]TITLE プロパティは、デフォルトで EF によって属性によって装飾されるべきではありませんか? 生成されたものは、null 許容と null 非許容の int を正確に区別します。

public partial class AWARD
{
    public int ID { get; set; }
    public int PERSON_ID { get; set; }
    public string TITLE { get; set; }
    public string CITY { get; set; }
    public Nullable<int> STATE_PROVINCE { get; set; }
    public Nullable<int> COUNTRY { get; set; }
    public string ORGANIZATION { get; set; }
    public int YEAR { get; set; }
    public Nullable<int> MONTH { get; set; }

    public virtual PERSON PERSON { get; set; }
    public virtual V_COUNTRY V_COUNTRY { get; set; }
    public virtual V_USA_STATE V_USA_STATE { get; set; }
}
4

2 に答える 2

1

C# には値型と参照型があります。String は参照型であり、本質的に既に null である可能性があります。一方、Int は値型であり、null の概念がありません。そのため、C# では、値の型をラップする null 許容型の構造 System.Nullable が導入されました。つまり、null にする必要がある int がある場合は、それをNullable<int>(またはint?略して) 宣言する必要があります。ただし、 String は参照型であり、既に null になる可能性があるため、 を宣言する理由はありませんNullable<string>

タイプをデータベースの null 制約と一致させようとすることは問題ではありません。必要に応じてプロパティを null にできるようにするだけです。

Luksan の回答は、既に [Required] 注釈の欠如に対処しています。EF が文字列ではなく int の null 値を区別しているように見える理由を明確にしたかっただけです。

于 2013-01-26T20:04:53.027 に答える
1

どうやら、Entity Framework の既定のコード生成戦略では、 のようなデータ注釈属性は生成されませんRequired。ただし、これを行うために、カスタム T4 テンプレートをエンティティ モデルと組み合わせて使用​​できます。ここで関連する回答を参照してください:データ注釈用の Entity Framework t4 テンプレートはどこにありますか?

于 2013-01-26T18:14:21.650 に答える