首先使用实体框架6和代码,我有一个现有的实体类,如下所示:
public class UserAccount
{
public int Id { get; set; }
public string Username { get; set; }
}
到目前为止,一切都很好。几个帐户已成功插入数据库。现在,基于一个新的需求,我想添加一个类型为"的新字段;"长";默认值为"0";0〃;。因此,它必须是不可为null的。直到今天我还在想";这就是数据注释的作用&";。所以我在课堂上添加了这个:
[Required]
[DefaultValue(0)]
public long Number { get; set; } = 0;
启用了自动迁移后,我启动了应用程序,并立即得到一个异常:";"UserAccount"上的属性"Number"无法设置为"null"值"。通过SQL Server Management Studio对数据库进行调查后,问题很明显:EF自动创建了一个可为null的";bigint";没有默认值的列。
在其他实体上,像[Required]或[MaxLength((]这样的属性工作得很好。
为什么EF在这种情况下忽略我的数据注释?添加具有默认值的新属性/列的正确方法是什么?
尝试将属性添加为可为null:
public class UserAccount
{
public int Id { get; set; }
public string Username { get; set; }
[Required]
[DefaultValue(0)]
public long? Number { get; set; } = 0;
}
如果您没有具体说明这一点,那么数据库需要现有寄存器的值。
然后运行应用程序。在数据库上,直接使用sql脚本将默认值指定给现有寄存器:
UPDATE {mytable} set Number=0 WHERE Number IS NULL;
将{mytable}更改为您的表名
在此之后,如果不需要可以为null的列,请删除符号"长类型属性并再次运行