Existe-t-il un moyen de créer un index sur une propriété / colonne en utilisant d'abord le code, au lieu d'utiliser le nouveau IndexAttribute
?
112
Existe-t-il un moyen de créer un index sur une propriété / colonne en utilisant d'abord le code, au lieu d'utiliser le nouveau IndexAttribute
?
Réponses:
Eh bien 26.10.2017 Entity Framework 6.2 a été officiellement publié . Il inclut la possibilité de définir facilement des index via Fluent API. Ho il est à utiliser était déjà annoncé dans la version bêta de 6.2.
Vous pouvez maintenant utiliser la
HasIndex()
méthode, suivie deIsUnique()
s'il doit s'agir d'un index unique.Juste un petit exemple de comparaison (avant / après):
Il est également possible de marquer l'index comme clusterisé avec
.IsClustered()
.MODIFIER N ° 1
Ajout d'un exemple d'index multi-colonnes et d'informations supplémentaires sur la façon de marquer un index comme clusterisé.
MODIFIER # 2
Comme information supplémentaire, dans EF Core 2.1, c'est exactement la même chose que dans EF 6.2 maintenant.
Voici l'artcile MS Doc comme référence.
la source
new
. Je le réparerai.Actuellement, il n'y a pas de "support de première classe" pour la création d'un index via l'API fluent, mais ce que vous pouvez faire, c'est via l'API fluent, vous pouvez marquer les propriétés comme ayant des attributs de l'API d'annotation. Cela vous permettra d'ajouter l'
Index
attribut via une interface fluide.Voici quelques exemples de l'élément de travail du site Problèmes pour EF.
Créez un index sur une seule colonne:
Plusieurs index sur une seule colonne:
Index multi-colonnes:
L'utilisation des techniques ci-dessus entraînera
.CreateIndex()
la création automatique d'appels pour vous dans votreUp()
fonction lors de l'échafaudage de votre prochaine migration (ou la création automatique dans la base de données si vous n'utilisez pas de migrations).la source
.Primarykey(x=>x.id,clustered:false)
méthodeHasAnnotation
méthode et il n'y a AUCUNE méthode comme celle-ci. mais j'ai trouvé une méthode dont le nomHasColumnAnnotation
accepte les paramètres que vous fournissez. Avez-vous besoin de mettre à jour votre réponse ou ai-je tort?J'ai créé quelques méthodes d'extension et les ai enveloppées dans un package nuget pour rendre cela beaucoup plus facile.
Installez le
EntityFramework.IndexingExtensions
package nuget.Ensuite, vous pouvez faire ce qui suit:
Le projet et le code source sont ici . Prendre plaisir!
la source
IndexAttribute
classe d'EF , je ne peux donc pas l'inclure dans ma bibliothèque.Sans nom explicite:
Avec un nom spécifique:
la source
EntityFramework
. il est inclus dans cette assemblée. juste confus au sujet de la NS.instead of using the new IndexAttribute
avez-vous remarqué?À partir d'EF 6.1, l'attribut
[Index]
est pris en charge.Utiliser
[Index(IsUnique = true)]
pour un index unique.Voici le lien de Microsoft
la source
[Index("IX_BlogIdAndRating", 2)]
public int Rating { get; set; }
[Index("IX_BlogIdAndRating", 1)]
public int BlogId { get; set; }
ici la référence de MicrosoftEntity Framework 6
Et ajoutez en utilisant:
la source
Vous pouvez utiliser l'annotation de données INDEX Code First Data Annotations
la source
Si vous ne souhaitez pas utiliser d'attributs sur vos POCO, vous pouvez toujours le faire comme suit:
Vous pouvez exécuter cette instruction dans votre
DbInitializer
classe dérivée personnalisée . Cependant, je ne connais aucun moyen de l'API Fluent de le faire.la source
J'écris une méthode d'extension à utiliser dans EF fluent pour éviter du code supplémentaire:
puis utilisez-le comme ceci:
ou comme ceci si l'index a besoin de certaines configurations:
la source
Vous pouvez utiliser l'un de ces
// Index
ou
la source