我尝试使用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)多次使用默认值,并且每次都有效,字符串是否有特殊行为?
答案 0 :(得分:0)
正如DevilSuichiro在评论中所建议的那样,填充默认值只适用于字段/列不可为空的情况。我不知道它是否有计划行为,但现在它看起来像是在EF / SQL中这样。
所以这可以按预期工作:
AddColumn("dbo.SupplierCodeMappings", "SupplierCompanyCode",
c => c.String(nullable: false, defaultValueSql:"'X'"));