0
EFの移行(コードファースト)を使用してDBを更新しようとしています。私は、デフォルト値が含まれている必要があり、新しい文字列列を追加したいので、私はこのような移行を作成:EFの移行 - 文字列のデフォルト値
public override void Up()
{
AddColumn("dbo.SupplierCodeMappings", "SupplierCompanyCode",
c => c.String(defaultValueSql:"'X'"));
}
私は私の意見でもOKに見えた、それから、スクリプトを生成します。私はDBに対してそれを実行したときに
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)で何度もデフォルト値を使用していましたが、毎回機能しました。文字列に対して特別な動作がいくつかありますか?
は、デフォルト値が挿入されていないかもしれないが、しかしそれは奇妙な行動になります。カラムをnullにできないようにするときに機能しますか(.IsRequired、[必須])? – DevilSuichiro
いいえ、マイグレーションに 'nullable:false'を追加しました。しかし、私はそれがとにかくいくつかの値を埋めることができると信じて、それは私にいくつかのバグのように少し聞こえる。 –
あなたの視点によると思います。私は、デフォルト値はそうでなければnullがあるはずだと言います。ただし、NULL可能な列の場合、nullは有効な値であると主張することもできます。 SQL標準では、他の値が指定されていない場合はデフォルト値が使用されます。マイグレーションの場合、値nullは十分に具体的です。 – DevilSuichiro