0
我試圖使用EF遷移(代碼優先)來更新數據庫。我想添加一個新的字符串列,它包含一個默認值,所以我創建的遷移是這樣的: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')
然而,當我運行它反對DB,新列有所有行NULL
值。 (我也嘗試過在遷移中使用defaultValue:"X"
的變體,但沒有成功)。
我以前使用過不同類型(int,DateTime)之前的默認值,它每次都有效,是否有一些特殊的字符串行爲?
可能是默認值不插入,因爲該列是空的,但是這將是一個怪異的行爲。當列不能爲空(.IsRequired,[必需])時它會起作用嗎? – DevilSuichiro
好主意,我向遷移添加了'nullable:false',它可以工作。不過,我認爲它應該能夠填補一些價值,這聽起來有點像我的一些錯誤。 –
取決於你的觀點我猜。我會說默認值應該是,否則會有空。但是,您也可以爭辯說,對於可空列,null是有效值。在SQL標準中,如果沒有指定其他值,則使用默認值;對於遷移,看起來值null是足夠具體的。 – DevilSuichiro