使主键可空与不可空的副作用是什么?
本文关键字:副作用 是什么 | 更新日期: 2023-09-27 18:07:12
当使用实体框架时,你可以为实体类定义一个非空的主键int/long:
class Car
{
public int Id {get; set;}
}
还可以将主键定义为可空的int:
class Car
{
public int? Id {get; set;}
}
我想知道这两个选项的优缺点是什么?此外,如果我使用第二个选项,我应该用[Required]
属性注释Id
吗?
如果你想让你的键为NULL和唯一,那么让你的键为UNIQUE键。主键不能为空。就像
[Index("IX_MyKey", 1, IsUnique = true)]
public int Id { get; set; }
我不确定使主键为NULL的优点,但就缺点而言,唯一的事情是,如果您将使主键为NULLable,那么它不再是主键。主键使规范化数据库可被引用。
主键总是不可空的。此外,它们是不可变的(至少EF不允许您为现有对象修改它们)。
使用这两种选择中的任何一种几乎没有利弊。但是第一个(使用非空类型)看起来更自然,因为它匹配数据库列的空性。然而,即使由于某种原因您使用第二个选项,也不需要使用Required
属性或IsRequired()
流畅配置,因为一旦EF知道它是主键(或主键的一部分),它将使相应的数据库列不可空。