Maison >base de données >tutoriel mysql >Pourquoi Entity Framework pluralise-t-il les noms de table dans MySQL lorsque mon modèle attend un nom singulier ?

Pourquoi Entity Framework pluralise-t-il les noms de table dans MySQL lorsque mon modèle attend un nom singulier ?

DDD
DDDoriginal
2024-10-29 09:25:30360parcourir

Why Does Entity Framework Pluralize Table Names in MySQL When My Model Expects a Singular Name?

Différence de pluralisation des noms de table Entity Framework

Entity Framework (EF) est conçu pour pluraliser automatiquement les noms de table en fonction de la convention selon laquelle les noms de classe de modèle représentent des entités singulières. Cependant, dans certains cas, vous pouvez rencontrer une divergence où EF crée un nom de table pluriel alors que le modèle ou la vue attend un nom singulier.

Problème :

Le le code définit un modèle nommé Vote et attend une table nommée "vote" dans MySQL. Cependant, EF crée à la place une table nommée « votes ». Lorsque vous tentez d'accéder à la table à partir de la vue, une exception se produit indiquant que la table « vote » n'existe pas.

Cause possible :

Le connecteur MySQL .NET peut ne pas prendre entièrement en charge les conventions de pluralisation des noms de table d'EF.

Solution :

Pour résoudre ce problème, vous pouvez personnaliser le comportement de pluralisation des noms de table dans EF. Voici les étapes :

1. Personnaliser la méthode OnModelCreating :

Dans la classe DbContext, remplacez la méthode OnModelCreating et désactivez PluralizingTableNameConvention.

<code class="csharp">protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}</code>

2. Supprimer la création initiale de la base de données :

Les initialiseurs Entity Framework peuvent être utilisés pour créer et initialiser la base de données. Cependant, le connecteur .NET de MySQL peut ne pas permettre à EF de créer des bases de données. Pour éviter ce problème, assurez-vous que la base de données existe avant qu'EF ne tente de la créer.

<code class="csharp">// Remove database creation initializer
// Database.SetInitializer(new DropCreateDatabaseAlways<myDB>());</code>

3. Arrêtez l'invocation de la création du modèle de base :

Assurez-vous que l'implémentation de base de OnModelCreating n'est pas invoquée, car elle pourrait remplacer votre personnalisation et réactiver la pluralisation des noms de table.

<code class="csharp">// Don't call the base implementation
// base.OnModelCreating(modelBuilder);</code>

4. Créer une base de données si elle n'existe pas :

Créez la base de données manuellement si elle n'existe pas. Cela garantit qu'EF peut utiliser le nom de table correct sans rencontrer l'exception de table manquante.

Conseils supplémentaires :

  • Utilisez l'attribut [Table] pour spécifier explicitement le nom de la table si nécessaire.
  • Envisagez d'utiliser un autre fournisseur de base de données qui prend entièrement en charge les conventions de nom de table d'EF.

En suivant ces étapes, vous devriez être en mesure de résoudre la pluralisation du nom de table. problème de divergence et accédez avec succès à la table « vote » depuis votre vue.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn