我正在Udemy的课程上学习.NET身份。他用的是.NET 5,但我用的是.NET 6。他创建了2个实体。
第一个
当我尝试这些,在迁移ImagePath和性别部分是nullable=false自动。
ImagePath = table.Column<string>(type: "nvarchar(max)", **nullable: false**),
Gender = table.Column<string>(type: "nvarchar(max)",** nullable: false**),
这是因为SDK的差异吗?
我是否应该使用?来使ImagePath和Gender可为空,如下所示?
public string? ImagePath { get; set; }
public string? Gender { get; set; }
什么是正确的方法来摆脱这一点?
我应该删除迁移,然后在添加到属性后重新创建数据库吗?
CS 8618-退出构造函数时,不可为空的变量必须包含非空值。请考虑将其声明为可为空。
1条答案
按热度按时间9o685dep1#
在.NET 5和更早版本中,所有引用类型都是可空的,在EF中,您必须使用
DbContext
中的属性或Fluent API指定相应的列不为空。在.NET 6和更高版本中,引用类型默认情况下是不可空的,您可以通过将?
附加到类型来指定它们是可空的。在此上下文中,.NET 6中的string?
相当于.NET 5中的string
。您应该进行该更改并重建数据库或应用新的迁移。