使主键可空数与非可空数相比有什么副作用

时间:2016-09-16 13:33:43

标签: c# entity-framework orm entity-framework-6

使用Entity Framework时,您可以将实体类的主键定义为非可空的int / long:

class Car
{
    public int Id {get; set;}
}

您还可以将主键定义为nullable int:

class Car
{
     public int? Id {get; set;}
}

我想知道这两个选项的优缺点是什么?此外,如果我使用第二个选项,我应该使用Id属性注释[Required]吗?

2 个答案:

答案 0 :(得分:2)

如果你想让你的密钥为NULL并且unqiue,那么把你的密钥作为一个独特的密钥。 PRIMARY键不能为空。像

这样的东西
[Index("IX_MyKey", 1, IsUnique = true)]
public int Id { get; set; }

我不确定将主键设为NULL的优点,但就缺点而言,唯一的问题是如果您将主键设为NULLable,那么它就不再是主键。主键使规范化数据库可引用。

答案 1 :(得分:1)

主键始终不可为空。它们也是不可变的(至少EF不允许你为现有对象修改它们)。

使用这两个选项中的任何一个几乎没有利弊。但是第一个(使用非可空类型)看起来更自然,因为它匹配数据库列的可空性。但是,即使由于某种原因您使用第二个选项,也不需要使用Required属性或IsRequired()流畅配置,因为一旦EF知道它是主键(或主键的一部分) ,它会使相应的数据库列不可为空。

相关问题