如何使用Entity Framework Code First Migrations影响列的顺序

10

我正在使用Entity Framework 4.3 Code First并尝试使用迁移功能。

如果我向我的类添加一个新属性,然后从包管理器控制台窗口运行Add-Migration命令,我会得到以下类似输出:

    public override void Up()
    {
        AddColumn("Products", "Discontinued", c => c.Boolean(nullable: false));
    }

我希望能够影响列的顺序,因为我不想它只是追加到表中,而是放置在特定索引处。我认为我可以将其添加到我的modelBuilder配置中,类似于:

Property(p => p.Discontinued).HasColumnOrder(2);

但运行Update-database似乎没有使用它。这可以作为迁移完成吗?


a) 没有办法在不进行大量修改的情况下插入到之前的列中。 b) 通过使用“软删除”来保留过时数据,你不应该将其保存在数据库中 - 应该考虑将其存档。 - Travis J
在数据库表中按特定顺序设置列有什么意义呢?它只是一个数据存储。 - Ladislav Mrnka
1
仅仅是为了美观而已,你可以在模型构建器创建数据库时指定它,所以我想知道在迁移的过程中添加新列是否可能。这不是什么大问题。 - SteveB
1
对我来说,这是一个巨大的问题。我正在设置一个Code First模型以匹配现有(巨大的)数据库。CF工具不允许您在新构建的数据库上强制执行顺序,并且Schema Compare工具似乎不允许您忽略列顺序。由于有数百个表格,这将需要我花费数天而不是几个小时。 - HiredMind
1个回答

6
这只是缺少功能的问题。SQL本身不依赖于任何列的隐式顺序(有一些例外:ORDER BY,...)。
SQL Server和ORACLE都没有直接的SQL DDL命令(又称为ALTER TABLE...)来移动列。因此,没有改变顺序的可能性,除非付出很大的努力(重新创建表)。例如,请参见:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接