以前的EF Core Model 中,string属性默认映射为Nullable,添加属性【Required】才会映射为NotNull,但是在升级到.Net 6.0后发生改变。
.Net 6.0启用了Nullable Context,csproj中多了<Nullable>enable</Nullable>以支持C#8.0 推出的Nullable Reference Type 概念,启用后,若string没声明为string?在为null时则会发生异常,如果要明确声明为null,则需要在后面加上 Null-Forgving Operator,例如 string x = null!;如果不想启用新特性设置为disable,Compiler恢复为C# 7.3前的规则。
数据库Sql Schema 也会受到Nullabel Context的影响,当<Nullable>enable</Nullable>,即使没有加属性【Required】Model的字符串属性仍然会视为不可为null,在生成Sql脚本时CREATE TABLE也会加上NOT NULL