【问题标题】:How can I set the default value of a new table column during a Code-First Migrations?如何在 Code-First 迁移期间设置新表列的默认值?
【发布时间】:2013-07-13 15:19:15
【问题描述】:

我对代码优先迁移有点陌生,这让我很头疼......

基本上,我正在尝试创建一个新的值表(在我的示例中为“品种”)。我想在另一个表“Dogs”中添加一列,该表包含一个 BreedId,不能为空且具有默认值。

经过一番折腾,我最终得到了下面的代码。 (它不喜欢添加外键,所以我不得不评论一下)。

CreateTable(
            "dbo.Breeds",
            c => new
            {
                Id = c.Int(nullable: false, identity: true),
                Name = c.String(nullable: false),
            })
            .PrimaryKey(t => t.Id);


Sql("SET IDENTITY_INSERT [dbo].[Breeds] ON");
Sql("INSERT into [dbo].[Breeds] ([Id], [Name]) VALUES ('1', 'Long Hair')");
Sql("SET IDENTITY_INSERT [dbo].[Breeds] OFF");

AddColumn("dbo.Dogs", "BreedId", c => c.Int(nullable: false, defaultValue: '1'));
//AddForeignKey("dbo.Dogs", "BreedId", "dbo.Breeds", "Id");
CreateIndex("dbo.Dogs", "BreedId");

但是运行Update-Database后,结果是:

ALTER TABLE [dbo].[Dogs] ADD [BreedId] [int] NOT NULL DEFAULT 49
CREATE INDEX [IX_BreedId] ON [dbo].[Dogs]([BreedId])

如您所见,默认值已变为“49”而不是“1”,我不知道为什么。 谁能看到我哪里出错了,或者有没有更简单的方法来实现我想要做的事情?

谢谢!

【问题讨论】:

  • 在将“1”转换为整数 1 时可能会发生一些奇怪的事情,它会自动执行吗?您是否尝试过使用整数 1 而不是 '1' 并查看它是否有所作为?
  • 啊,是的——就是这样!删除了引号,这很好(一定是漫长的一天......)。谢谢!

标签: sql .net ef-code-first migration


【解决方案1】:

感谢 Scotch 发布答案,删除引号,然后正确设置默认值。 像这样:

AddColumn("dbo.Dogs", "BreedId", c => c.Int(nullable: false, defaultValue: 1));

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    相关资源
    最近更新 更多