Maison >base de données >tutoriel mysql >Pourquoi Entity Framework incrémente-t-il automatiquement les clés même lorsqu'elles sont spécifiées manuellement ?
Entity Framework et clés attribuées manuellement : un guide de dépannage
Un défi courant lors de l'utilisation de l'approche code first d'Entity Framework implique la tendance du framework à incrémenter automatiquement les clés, même lorsque les clés sont attribuées manuellement. Cet article détaille une solution et ses pièges potentiels.
Un développeur a récemment rencontré ce problème. Malgré la définition explicite des valeurs clés, Entity Framework a continué à s'auto-incrémenter. La solution typique, en utilisant HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
:
<code class="language-csharp">modelBuilder.Entity<event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);</code>
...a entraîné l'erreur suivante :
<code>Unhandled Exception: System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. --- System.Data.UpdateException: An error occurred while updating the entries. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Cannot insert explicit value for identity column in table 'Events' when IDENTITY_INSERT is set to OFF.</code>
Cette erreur se produit car IDENTITY_INSERT
pour la table « Événements » a été défini sur OFF. Pour résoudre ce problème, IDENTITY_INSERT
doit être explicitement défini sur ON avant d'insérer des données avec des clés spécifiées manuellement. Cela permet à la base de données d'accepter les valeurs clés pré-attribuées.
Alternativement, les attributs peuvent aboutir au même résultat :
<code class="language-csharp">[Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int EventID { get; set; }</code>
Cette approche fonctionne à la fois dans Entity Framework et Entity Framework Core. La clé est de gérer correctement le paramètre IDENTITY_INSERT
de la base de données pour éviter les conflits lors de l'attribution manuelle des valeurs de clé primaire. N'oubliez pas de le remettre sur OFF une fois votre insertion terminée pour un comportement standard de la base de données.
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!