[英]Entity Framework Core: Assign default value in DB modal for nullable columns in Database when retrieving Data
[英]Entity Framework Core: default value when migrating nullable column to required
我有一個以前可以為nullable
的datetime2
列。
我們現在需要設置此列,因此我們希望根據需要設置它並使用默認值 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.