簡體   English   中英

Entity Framework Core:將可空列遷移到必需時的默認值

[英]Entity Framework Core: default value when migrating nullable column to required

我有一個以前可以為nullabledatetime2列。
我們現在需要設置此列,因此我們希望根據需要設置它並使用默認值 1970-1-1 遷移該列。

我已經創建了遷移並將遷移文件編輯為以下內容:

protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<DateTime>(
            name: "Start",
            table: "Project",
            nullable: false,
            oldClrType: typeof(DateTime),
            oldType: "datetime2",
            oldNullable: true, 
            defaultValue: new DateTime(1970, 1, 1));
    }

我手動添加了defaultValue: new DateTime(1970, 1, 1)); 線。

不幸的是,更新數據庫時出現以下錯誤:

2021-03-22 10:12:55.5398:“UpdateDatabase”中發生錯誤:Microsoft.Data.SqlClient.SqlException (0x80131904):無法將值 NULL 插入“開始”列,表“dbo.Project”; 列不允許空值。 更新失敗。 該語句已終止。

我也嘗試通過defaultValueSql設置值,但發生同樣的錯誤:

defaultValueSql: "'1970-1-1'"

為什么 defaultValue 不起作用,我做錯了什么嗎?

提前致謝

順便說一句:這是被執行的腳本:

DECLARE @var0 sysname;
SELECT @var0 = [d].[name]
FROM [sys].[default_constraints] [d]
INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id]
WHERE ([d].[parent_object_id] = OBJECT_ID(N'[Project]') AND [c].[name] = N'Start');
IF @var0 IS NOT NULL EXEC(N'ALTER TABLE [Project] DROP CONSTRAINT [' + @var0 + '];');
ALTER TABLE [Project] ALTER COLUMN [Start] datetime2 NOT NULL;
ALTER TABLE [Project] ADD DEFAULT '1970-01-01T00:00:00.0000000' FOR [Start];

如果要在 DB 中創建現有列,則required確保列中沒有 null 值。 為了解決這個問題,更新表並用一個值填充列。

migrationBuilder.Sql("UPDATE Project SET Start = GETDATE() WHERE Start is null");
 migrationBuilder.AlterColumn<DateTime>(
        name: "Start",
        table: "Project",
        nullable: false,
        oldClrType: typeof(DateTime),
        oldType: "datetime2",
        oldNullable: true, 
        defaultValue: new DateTime(1970, 1, 1));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM