我正在使用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。
答案 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) 的情况