【问题标题】:How to affect the column order with Entity Framework Code First Migrations如何使用实体框架代码优先迁移影响列顺序
【发布时间】:2012-03-27 20:18:50
【问题描述】:

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

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

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

我希望能够影响列的顺序,因为我不希望它只是附加到表中,而是放置在特定索引处。我想我可以将它添加到我的模型构建器配置中,例如:

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

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

【问题讨论】:

  • a) 如果不进行大量黑客攻击,就无法插入先前的列,b) 您不应该使用“软删除”将不推荐使用的数据保留在数据库中 - 查看归档已弃用的数据。
  • 数据库表中的列按特定顺序排列有什么意义?它只是一个数据存储。
  • 仅出于审美目的,仅此而已。您可以在使用模型构建器创建数据库时指定它,所以只是想知道在迁移过程中添加新列时是否可以。没什么大不了的。
  • 对我来说,这是一个大问题。我正在设置一个 Code First 模型来匹配现有的(巨大的)数据库。 CF 工具不允许您对新建的数据库强制执行顺序,并且模式比较工具似乎不允许您忽略列顺序。有数百张桌子,我只需要几天而不是几个小时。

标签: entity-framework entity-framework-4 entity-framework-4.3


【解决方案1】:

这只是缺少功能的问题。 SQL 本身不依赖于任何隐含的列顺序(有一些例外: ORDER BY ,...)。

SQL Server 和 ORACLE 都没有直接的 SQL DDL 命令(又名ALTER TABLE...)来移动列。

因此,不费吹灰之力就不可能更改订单(重新创建表)。参见示例

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多