gpt4 book ai didi

c# - 使用迁移删除/添加列的 "defaultvaluesql"

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:55 25 4
gpt4 key购买 nike

这里我使用 EF6 迁移了 CodeFirst

public override void Up()
{
CreateTable(
"dbo.MyTable",
c => new
{
Id = c.Int(nullable: false, identity: true),
Date = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"),
})
.PrimaryKey(t => t.Id);
}

但是我们发现插入时无法自定义Date。因此,我们需要迁移以删除 Date 列上的 defaultValueSql 参数。

我试过使用不带 defaultValueSql 参数的 AlterColumn

public override void Up()
{
AlterColumn("dbo.MyTable", "Date", c => c.DateTime(nullable: false));
}

public override void Down()
{
AlterColumn("dbo.MyTable", "Date", c => c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"));
}

它既不适用于插入和更新Date,也不适用于表的定义。

CREATE TABLE [dbo].[MyTable] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Date] DATETIME DEFAULT (getutcdate()) NOT NULL,
);

有人遇到过这种情况吗?

最佳答案

实际上,在数据库中,为 defaultValueSql 创建了一个 Constraint,我认为这个参数是由 sys 表工作的,而不是 MyTable,这导致我的 AlterColumn 无效。

最终,我为自己的目的创建了一些原始的 SQL 命令,如下所示:

public override void Up()
{
Sql(@"
DECLARE @sql NVARCHAR(MAX)
SELECT @sql = N'alter table [EffectiveDonations] drop constraint ['+d.name+N']'
FROM sys.default_constraints
WHERE d.parent_object_id = OBJECT_ID(N'MyTable')
AND col_name(parent_object_id, parent_column_id) = N'Date'
EXEC (@sql)
");
Sql("PRINT 'Information: delete [defaultvaluesql]';");
}

public override void Down()
{
Sql(@"ALTER TABLE [MyTable] ADD DEFAULT getutcdate() FOR [Date]");
Sql("PRINT 'Information: create [defaultvaluesql] for column [Date] of table [MyTable]';");
}

分享希望对其他人有帮助。

关于c# - 使用迁移删除/添加列的 "defaultvaluesql",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29797772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com