web-dev-qa-db-fra.com

Code EntityFramework en premier: Définition de l'ordre des champs

J'utilise EntityFramework avec l'approche "Code d'abord" avec les migrations.

J'ai réussi à générer des tableaux à partir de mes modèles, mais les colonnes sont ajoutées dans un ordre alphabétique plutôt que dans l'ordre de mon modèle. 

J'ai essayé ceci:

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

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

Mais cela ne semble pas fonctionner. 

Comment définir manuellement l'ordre des champs dans la base de données?

J'utilise ASP.NET Core et EF Core (SqlServer) v1.1.0. 

16
Glenn Utter

Actuellement, le classement des colonnes par propriété de classe n'est pas implémenté. Voici la longue discussion sur l'ordre des colonnes. Commande de colonne # 2272

Mise à jour du 07/12/2017

Ce problème est dans le jalon de l'arriéré. Cela signifie que ce n'est pas va se passer pour la version 2.0. Nous allons réévaluer l'arriéré suivant la version 2.0 et considérons cet élément à ce moment-là.

11
Rahul Nikate

Mise à jour: dans EF Core 2.1, au moins pour la migration initiale, des colonnes sont ajoutées aux tableaux dans l'ordre dans lequel les propriétés pertinentes sont déclarées dans leurs classes respectives, plutôt que dans l'ordre alphabétique. Voir ici . Cependant, notez que les migrations Entity Framework ultérieures effectuées sur les mêmes tables ne modifieront pas l'ordre des colonnes créées précédemment.

2
Lloyd Conrade

Pour le moment, EF core ne le prend pas en charge .Mais il existe une solution de contournement. En d'autres termes, vous pouvez spécifier explicitement le code SQL dans votre opération de migration.

Au lieu d'utiliser la méthode CreateTable dans vos migrations, vous devez écrire explicitement le code SQL comme indiqué ci-dessous. Vous pouvez alors donner l'ordre à votre guise.

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

Vous pouvez lire sur le commnet de rowanmiller ici pour savoir comment résoudre ce problème pour le moment

1
Sampath