我使用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。
5条答案
按热度按时间mtb9vblg1#
当前未实现按类属性对列排序。下面是关于列排序的长时间讨论。列排序#2272
自2017年7月12日起更新
这个问题在backlog里程碑中。这意味着2.0版本不会出现这种情况。我们将重新评估2.0版本之后的积压工作,并在那时考虑这个项目。
自2019年10月6日起更新
问题2272随ef core v2.1一起提供,并将生成表中列的顺序与类中属性的顺序相匹配。然而,正如@lloyd conrade提到的,这只对最初的创作有用
创建了一个新的问题#10059,以跟踪可能实现的对column属性的order属性的尊重。
如果#2272的实现不足以满足您的需要,并且指定类似于[column(order=1)]的内容会有所帮助,请对此问题进行投票,并在下面添加有关您的场景(如果尚未列出)的详细信息。
注意“punted for 3.0”标签是在2019年5月10日添加的,也就是说它不会在ef core 3.0中发货。
yzuktlbb2#
更新:在efcore2.1中,至少对于初始迁移,列是按照相关属性在各自类中声明的顺序添加到表中的,而不是按照字母顺序。看这里。但请注意,在相同表上执行的任何后续实体框架迁移都不会更改先前创建的列的列顺序。
hsvhsicv3#
目前,ef core不支持它。但是有一个解决方法。也就是说,您可以在迁移操作中显式指定sql。
而不是使用
CreateTable
方法,您需要显式地编写sql,如下所示。你可以在这里读到关于rowanmiller的commnet关于如何解决这个问题的文章
kxe2p93d4#
您可以使用此解决方案向项目中添加对显式列排序的支持:https://github.com/premchandrasingh/efcorecolumnorder. 此解决方案添加了hascolumnorder扩展方法。示例文件夹中有一个使用示例。不要忘记替换dbcontext中相应的服务。
kmb7vmvb5#
您提到的列的顺序用于指定复合外键中列的顺序,就像某些表有两个或多个字段作为外键引用其他表一样,在这种情况下,您可以使用column(order=n)