EF迁移 - 字符串的默认值

时间:2017-09-22 16:04:12

标签: c# sql-server entity-framework database-migration

我尝试使用EF迁移(代码优先)更新数据库。我想添加一个新的字符串列,它应该包含一个默认值,所以我创建了这样的迁移:

public override void Up()
{
    AddColumn("dbo.SupplierCodeMappings", "SupplierCompanyCode", 
                  c => c.String(defaultValueSql:"'X'"));
}

我从中生成一个脚本,我的意见看起来也不错。

ALTER TABLE [dbo].[SupplierCodeMappings] ADD [SupplierCompanyCode] [nvarchar](max) DEFAULT 'X'
INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion])
VALUES (N'201709221530217_AddSupplierMappingCompanyCode', N'Ea.Data.Database.EaContext', xxxxxx , N'6.1.3-40302')

但是,当我针对数据库运行它时,新列的所有行都有NULL值。 (我还尝试了迁移中defaultValue:"X"的变体,但未成功)。

我之前使用不同类型(int,DateTime)多次使用默认值,并且每次都有效,字符串是否有特殊行为?

1 个答案:

答案 0 :(得分:0)

正如DevilSuichiro在评论中所建议的那样,填充默认值只适用于字段/列不可为空的情况。我不知道它是否有计划行为,但现在它看起来像是在EF / SQL中这样。

所以这可以按预期工作:

AddColumn("dbo.SupplierCodeMappings", "SupplierCompanyCode", 
              c => c.String(nullable: false, defaultValueSql:"'X'"));