这里我使用 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/