Utilisation du type de colonne SQL uniqueidentifier avec la structure Entity

.net .net-4.0 entity-framework sql-server

Question

Pour ma clé principale et mon identité dans notre table Clients, uniqueidentifier colonne uniqueidentifier avec une valeur par défaut définie à newsequentialid (). L'insertion de nouvelles lignes à l'aide de l'outil de gestion crée les valeurs de l'identifiant fin.

L'insertion du code .NET 4 via EF donne les résultats dans zéro GUID (00000-0000 ...) inséré. Je crée l'entité avec new, définit des valeurs et exécute EF AddToClients (par exemple). Si débogué, la valeur de la propriété id affiche zéro GUID. Je ne définis pas explicitement l'ID via Guid.NewGuid() dans mon code car je souhaite le laisser à newsequentialid() dans SQL Server. Le problème est que cela ne fonctionne pas. La première fois que le code est exécuté, la ligne est insérée avec zéro GUID. La prochaine fois, elle échoue et entraîne une exception de violation de clé primaire.

Comment puis-je obtenir que cela fonctionne sans avoir à définir le GUID dans mon code client?

Réponse acceptée

Vous devez modifier la valeur StoreGeneratedPattern de la propriété dans le concepteur EF. Définissez-le sur Identity . Cela évitera à EF de définir la valeur sur une insertion, puis de la capturer une fois l’insertion terminée.

Notez que si vous utilisez EF 4, vous pouvez avoir des problèmes avec le concepteur uniquement (voir ce lien ). Vous devrez peut-être modifier manuellement le fichier .edmx et définir StoreGeneratedPattern dans le modèle de stockage lui-même.


Réponse populaire

Faites un clic droit dans vous .edmx. Ouvrir avec l'éditeur de texte XML avec codage ou autre. Recherchez le nom de l'ID et ajoutez l'attribut à côté de celui-ci dans la même balise: StoreGeneratedPattern = "Identity".

Exemple:

<Property Name = "WorkerId" Type = "uniqueidentifier" Nullable = "false" StoreGeneratedPattern = "Identity" />



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow