Nullable <int>在对象属性中做什么?</int>

时间:2014-02-22 06:15:16

标签: asp.net-mvc-4

最近我决定废除EF“edmx”方法。我只是不喜欢EF在幕后做事。最初我在Code First和Database First之间玩弄,因为我不太确定如何在现有数据库上使用Code First。然后我发现了Scott Gu(http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an-existing-database.aspx)的这篇精彩文章。现在,在我的开发过程中,我已将所有内容切换为Code First。它工作正常。

为了节省一些打字,我复制了在.edmx文件中生成的模型。就在那时我注意到EF已经为属性生成了Nullable类型,特别是相关的ID。我可能不希望外键为null,对吧?我不明白为什么EF会这样做?现在我首先使用代码,我想我将删除所有这些可空类型。这样我的视图就会自动验证必填字段。

edmx文件中的课程模型:

public class Course
{
    public int CourseId { get; set; }
    public Nullable<int> ProgramId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Type { get; set; }

    public virtual Program Program { get; set; }
}

我会输入:

public class Course
{
    public int CourseId { get; set; }
    public int ProgramId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Type { get; set; }

    public virtual Program Program { get; set; }
}

在实验中,我意识到删除nullable会自动在我的视图中对Program字段强制执行必要的验证。

4 个答案:

答案 0 :(得分:1)

支持可空类型的一个参数是,如果您忘记指定一个值,您将获得默认的int(0)值,这可能是不可取的。如果数据库目标列没有约束

,在某些情况下可能会导致数据库中的错误数据

答案 1 :(得分:1)

这意味着Course可以选择Program。正如您已经发现的那样,将其更改为int将使其成为必需。

答案 2 :(得分:1)

nullable可以分配从-2147483648(对于int32)到2147483647(对于int32)的任何值,或者可以为其赋值为null值... 。 有关详细信息,请参阅此http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

答案 3 :(得分:1)

Nullable Value Types

ProgramId最初没有定义的值,即使Integer类型的默认值为0。

When you declare a variable with a nullable type, its HasValue property has a 
default value of False. This means that by default the variable has no defined value, 
instead of the default value of its underlying value type.
相关问题