0

我正在使用数据库中的实体代码优先。这是我的user模型。

    public partial class User
    {
      //other fields
      [Required]
      [MaxLength(15)]
      public string Passkey { get; set; }
      [Required]
      public bool isAdmin { get; set; }  
    }

下面的代码是在我想将表中的PasskeyUsersvarbinary更改为时生成的,我通过将模型中varchar的类型从更改为byte更改为(这是更改后的形式)。我能够更新数据类型。stringpublic string Passkey { get; set; }

public partial class AddPasskey : DbMigration
        {
            public override void Up()
            {
                AlterColumn("dbo.Users", "Passkey", c => c.String(nullable: false, maxLength: 15));
            }

            public override void Down()
            {
                AlterColumn("dbo.Users", "Passkey", c => c.Binary(nullable: false, maxLength: 15));
            }
        }

我将此“isAdmin”属性设置为required. 我想删除此required验证,并将其默认值设置为 0。我复制了为迁移自动生成的代码Passkey并对其进行了更改。以下是更改后的代码,这是错误的。

    public partial class AddisAdmin : DbMigration
        {
            public override void Up()
            {
                AlterColumn("dbo.Users", "isAdmin", c => c.bool(nullable: false, defaultValue:0));
            }

            public override void Down()
            {
                AlterColumn("dbo.Users", "isAdmin", c => c.bool(nullable: false));
            }
        }

如何执行此迁移?更新数据库中指定的字段的正确语法是什么bit

4

3 回答 3

0

首先,使用bool?语法或Nullable<bool>. 代码中不可为空的任何内容在数据库中都不能是可选的。因此,使其可为空并从您的模型上方属性中删除[Required]数据注释。isAdmin

于 2016-10-19T11:17:28.163 回答
0

您需要Enable-Migrations首先,这将生成一个 Migrations 目录,您可能已经这样做了。

配置迁移后,您可以运行然后运行Update-Database​​.

我从工具菜单中的“包管理器控制台”运行上述命令。

此外,要更改数据类型,您还可以通过以下Sql()方法运行 SQL:

Sql("ALTER TABLE dbo.Users ALTER COLUMN isAdmin BIT")

于 2016-10-19T08:30:52.720 回答
0

删除您手动添加的代码并add-migration再次运行命令以添加新的迁移,并且应该创建一个具有所需更改的新文件,您可以在此处更改它并将默认值设置为零

于 2016-10-19T11:41:59.340 回答