Jon*_*ell 8 entity-framework ef-code-first
使用Code First在类中定义字符串时,生成的数据库中的列的缺省值允许为空.
public string MyString { get; set; }
Run Code Online (Sandbox Code Playgroud)
创建此列:
MyString(nvarchar(max),null)
我可以通过使用[Required]
属性或使用Fluent API中的.IsRequired()方法将其更改为"not null" .
其他数据类型的默认值不允许空值.
public int MyInt { get; set; }
public DateTime MyDateTime { get; set; }
public float MyFloat { get; set; }
public decimal MyDecimal { get; set; }
public bool MyBool { get; set; }
Run Code Online (Sandbox Code Playgroud)
创建这些列:
MyInt(int,not null)
MyDateTime(datetime,not null)
MyFloat(真实,非空)
MyDecimal(十进制(18,2),不为null)
MyBool(位,不是null)
我可以通过在Fluent API中使用.IsOptional()方法来更改这些以允许空值.是否有一个属性可以做同样的事情?
我还可以更改类定义中的数据类型以允许空值(int?,DateTime?等),这会产生允许数据库中为空的列.
默认情况下,对于字符串而不是其他数据类型允许空值的基本原理是什么?
你自己回答了这个问题.您不能对列出的任何其他数据类型具有空引用.因此,如果代码无法处理null,那么它也将确保数据库强制执行该操作.
只是为了使这一点非常清楚,因为你专注于字符串与其他价值类型.这是关于字符串的MDSN文章,如果你搜索null,你会看到这一行:
相反,空字符串不引用System.String对象的实例,并且任何尝试在空字符串上调用方法都会导致NullReferenceException
但是,除非int是可空的,否则它将永远不会抛出NullReferenceException,因为它必须始终具有默认值.