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 ?

Pourquoi Entity Framework incrémente-t-il automatiquement les clés même lorsqu'elles sont spécifiées manuellement ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-15 19:11:42210parcourir

Why Does Entity Framework Auto-Increment Keys Even When Manually Specified?

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!

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