EntityFramework代码优先:设置字段顺序

时间:2016-12-21 15:59:12

标签: c# entity-framework asp.net-core entity-framework-core asp.net-core-1.0

我正在使用EntityFramework和“Code first”方法进行迁移。

我已经成功地从我的模型中生成了表格,但是这些列是按字母顺序添加的,而不是我模型中的顺序。

我试过这个:

[Key, Column(Order=0)]
public int MyFirstKeyProperty { get; set; }

[Column(Order=1)]
public int MySecondKeyProperty { get; set; }

但这似乎不起作用。

如何手动设置数据库中字段的顺序?

我正在使用ASP.NET Core和EF Core(SqlServer)v1.1.0。

5 个答案:

答案 0 :(得分:11)

目前未按类属性排序列。 这是关于列排序的长篇讨论。 Column ordering #2272

<强> Update as on 07/12/2017

  

此问题出现在Backlog里程碑中。这意味着它不是   将在2.0发布时发生。我们将重新评估积压   在2.0发布之后,当时考虑这个项目。

答案 1 :(得分:4)

更新:在EF Core 2.1中,至少对于初始迁移而言,列是按照在其各自类中声明相关属性的顺序(而不是字母顺序)添加到表中的。参见here。但是请注意,对相同表执行的任何后续Entity Framework迁移都不会更改之前创建的列的列顺序。

答案 2 :(得分:1)

目前 EF核心不支持。但是有一种解决方法。也就是说,您可以在迁移操作中明确指定SQL。

您不需要在迁移中使用CreateTable方法,而是需要显式编写SQL,如下所示。您可以根据需要提供订单。

migrationBuilder.Sql("CREATE TABLE Properties(
   MyFirstKeyProperty   INT   NOT NULL,
   MySecondKeyProperty int    NOT NULL,
   AGE  INT   NOT NULL,
   ......
   ......   
   PRIMARY KEY (MyFirstKeyProperty)
)");

您可以阅读rowanmiller's commnet here about how to sort out that issue just for now

答案 3 :(得分:0)

您可以使用此解决方案为您的项目https://github.com/premchandrasingh/EFCoreColumnOrder添加对显式列顺序的支持。此解决方案添加了HasColumnOrder扩展方法。 Sample文件夹中有一个使用示例。不要忘记替换DbContext中的相应服务。

答案 4 :(得分:0)

您提到的列的顺序用于指定复合外键列的顺序,就像某些表具有两个或多个字段作为引用其他表的外键的情况一样,因为可以使用 Column (Order = n) 的情况