2

使用 EF 5.0.0、VS 2012 和 .NET 4.5,当我从现有 SQL Server 2012 数据库添加新的 ADO.NET 实体数据模型时,生成的代码不会区分可空和不可空 varchar。例如,TTITLE 是不可为空的,但 CITY 在我的数据库中是可空的,但它们最终会像在生成的代码中一样 - 这反过来又会产生验证问题。TITLE 属性不应该[Required]默认由 EF 的属性修饰吗?它确实生成了可空和不可空 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

Apparently, the default code-generation strategy for Entity Framework does not generate Data Annotation attributes like Required. However, you can use a custom T4 template in conjunction with your entity model in order to do this. See the related answer here: Where are the Entity Framework t4 templates for Data Annotations?

于 2013-01-26T18:14:21.650 回答
1

C# 有值类型和引用类型。String 是一种引用类型,本质上已经可以为 null。另一方面,Int 是一种值类型,没有 null 的概念。所以 C# 引入了一个可以为空的类型结构,它包装了值类型,System.Nullable。换句话说,如果您有一个可能需要为 null 的 int,则需要将其声明为Nullable<int>(或int?简称为)。但是,由于 String 是一种引用类型并且已经可以为 null,因此没有理由声明Nullable<string>.

这不是试图将类型与您的数据库空约束匹配的问题;如果需要,这只是允许属性为空的问题。

Luksan 的回答已经解决了缺少 [Required] 注释的问题;我只是想澄清为什么 EF 似乎区分整数而不是字符串的空值。

于 2013-01-26T20:04:53.027 回答