最近我决定废除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字段强制执行必要的验证。
答案 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)
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.