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

C# EntityFramework代码优先:设置字段顺序,c#,entity-framework,asp.net-core,entity-framework-core,asp.net-core-1.0,C#,Entity Framework,Asp.net Core,Entity Framework Core,Asp.net Core 1.0,我将EntityFramework与“代码优先”方法一起用于迁移 我已经成功地从我的模型生成了表,但是这些列是按字母顺序添加的,而不是按模型中的顺序添加的 我试过这个: [Key, Column(Order=0)] public int MyFirstKeyProperty { get; set; } [Column(Order=1)] public int MySecondKeyProperty { get; set; } 但这似乎不起作用 如何手动设置数据库中字段的顺序 我正在使用ASP

我将EntityFramework与“代码优先”方法一起用于迁移

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

我试过这个:

[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

当前未实现按类属性对列进行排序。 下面是关于列顺序的长时间讨论

这个问题在Backlog里程碑中。这意味着它不是 将在2.0版本中实现。我们将重新评估积压的工作 在2次发布之后,考虑这个项目。

EF Core v2.1附带的第2272版,将生成表中列的顺序与类中属性的顺序相匹配。然而,正如@lloyd conrade提到的,这只对初始创建有用

创建了一个新的问题#10059,以跟踪关于Column属性的Order属性的可能实现

如果#2272的实现不足以满足您的需要,请指定一些内容 如[列(顺序=1)]会有所帮助,请对此问题投票并添加详细信息 关于您的场景(如果尚未列出),请参见下文


请注意,“Punted for 3.0”标签是在2019年5月10日添加的,也就是说它不会在EF Core 3.0中发布。

目前,EF Core不支持它。。但是有一个解决方法。也就是说,您可以在迁移操作中显式指定SQL

您不需要在迁移中使用
CreateTable
方法,而是需要显式地编写SQL,如下所示。在这里,您可以按照自己的意愿给出顺序

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

您可以阅读有关更新的信息:在EF Core 2.1中,对于初始迁移,至少会按照相关属性在各自类中声明的顺序(而不是按照字母顺序)将列添加到表中。看见但请注意,在相同表上执行的任何后续实体框架迁移都不会更改先前创建的列的列顺序。

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

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

相当令人失望,尤其是目前计划发布的任何版本都没有计划改变这一点。如果您不喜欢列顺序,正确的做法是编辑生成的迁移文件并根据需要移动顺序+谢谢你们的回答!手动编辑
CreateTable
调用成功。遗憾的是,EF Core还不支持它,但希望它会支持。关于在下一次迁移中引入一个新列时该怎么做的任何提示,比如说,该列应该是表中的第二列?它应该在EF Core 2.1.0中修复,但它已从发行版中推出,并且仍然处于打开状态和待办事项中。。。糟糕透了@杰斯,我想说清楚,这是另一个问题。OP询问的不是基于属性顺序对列进行排序。在v2.1中实际发布的(尽管有您提到的问题中提到的警告);见第2272期。OP询问的是使用ColumnAttribute的Order属性,不幸的是,该属性在v3.0中仍然无法提供。这两个问题容易混淆;不过,这对你的帖子仍然有用!EF Core 5.0.6-已试用,但列排序仍不起作用(先编写代码)。这与添加到现有表中的新列有何关系?如果使用HasColumnOrder扩展方法显式指定列的序号,则该列将被放置在正确的位置。这将触发表重建。我不确定这是否真的会发生,如果真的发生,那将是非常不可取的。您测试过此场景吗?此解决方案仅允许您在创建表时指定显式列顺序(EF迁移中的CreateTable方法)。当然,如果表已经存在,此解决方案不会重建表。