【问题标题】:Column name is specified more than once EF Code First Migration列名被多次指定 EF Code First Migration
【发布时间】:2016-04-08 09:31:01
【问题描述】:

我在一个表中有两列,我使用代码优先方法创建了它们,然后我在 C# 模型中更改了它们的数据类型,而不是实际的数据库,最后我尝试了稍后的迁移以更改它们在数据库中的数据类型

public partial class PriceAndMargin : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Items", "Price", c => c.Int(nullable: false));
        AddColumn("dbo.Items", "ShortageMargin", c => c.Int(nullable: false));
    }

    public override void Down()
    {
        DropColumn("dbo.Items", "ShortageMargin");
        DropColumn("dbo.Items", "Price");
    }
}

如果我写了这段代码,应该删除 Price 列和 ShortageMargin 列并重新创建它们 但它会在控制台中为我显示此消息

每个表中的列名必须是唯一的。表 'dbo.Items' 中的列名 'Price' 被多次指定

提前感谢

【问题讨论】:

  • 描述您的整个工作流程。您是自己将价格列添加到表中,还是在之前的迁移中添加?
  • 不,我使用了上面的迁移@CodeCaster
  • 您走的步骤不清楚,代码与您的描述不符。您显示的迁移添加了两列。其中一列已存在。
  • 我在上面写道,这两个列已经存在,但是具有不同的数据类型,我使用代码优先方法创建了它们,然后我在 C# 模型中更改了它们的数据类型,而不是实际的数据库,最后我尝试在上面迁移为了改变他们在数据库中的数据类型@CodeCaster
  • DropColumn 不应该解决这个问题@marc_s

标签: c# sql-server entity-framework


【解决方案1】:

如果我写了这段代码,应该删除 Price 列和 ShortageMargin 列并重新创建它们

并非如此,您的“向上”添加了列。 “降级”部分仅适用于您想“降级”数据库(您恢复迁移)。 我不知道您如何更改对象的类型,以及您从哪个版本运行“添加迁移”命令,但您应该有一个带有“AlterColumn 的脚本而不是 AddColumn

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2020-04-29
    • 2012-11-16
    • 1970-01-01
    • 2011-09-27
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多