EF 6:添加具有默认值的新属性无效



首先使用实体框架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的列,请删除符号"长类型属性并再次运行

最新更新