J'ai un POCO que j'essaie de créer des migrations de code de code et ensuite des données de semences. Le problème est que je souhaite insérer des valeurs spécifiques dans la colonne d'identité lors de l'ensemencement.
voici mon poco p> et voici mon appel addorupdate dans la méthode de la graine de la configuration.cs p>
4 Réponses :
Ceci comment désactiver l'identité via Attribut / Conventions
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Result>().Property(x => x.ResultId) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); }
Merci @aron, j'ai inséré avec succès dans le champ Identity à l'aide de la méthode Attributs que vous avez spécifiée.
Si l'OP a besoin d'identifiy_insert, c'est parce qu'ils ont une colonne d'identité. Vous ne pouvez pas simplement supprimer cette colonne d'identité pour effectuer une identité_insert. Ensuite, vous auriez besoin d'une autre migration pour allumer à nouveau l'identité pour cette colonne. Beaucoup mieux pour utiliser SQL brut et ne pas changer le schéma de base de données pour certains inserts.
voir ci-dessous pour obtenir des informations supplémentaires nécessaires pour que identity_insert fonctionne avec le code de graine de migration de code - Première migration () em> p> J'ai utilisé la mise en œuvre d'Aron du système Pour le faire fonctionner, j'ai enveloppé la logique de la méthode de la graine dans une transaction SQL et utilisé . ComponentModel.DataNotations.schema.databaseGénerated CODE> Attribut Pour définir la propriété Créé par la DB du modèle à "None", mais je ne pouvais toujours pas dépasser l'erreur d'insertion d'identité. Je pensais que je publierais mes conclusions ici au cas où quelqu'un d'autre a toujours des problèmes. p>
context.database.executeqlCommand ("Set Identity_insert MyTable MyTable sur") CODE> Pour autoriser l'insertion avant Pour exécuter la méthode
.AddorUpdate () code>. Voici mon fichier configuration.vb (à l'aide d'une table pour les types d'API Google comme exemple de données): p>
Après avoir recherché à cela, il semble que la clé ait été créée précédemment, puis vous ajoutez [Généra de base de données (base de donnéesGéneratedoption.none)] Dans une migration Il ne fera pas réellement ce que vous souhaitez, vous pouvez vérifier cela en allant à la table de l'explorateur de la base de données. -> KEYS -> PK -> Modifier et voir la spécification d'identité est défini sur Oui au lieu de non. P>
Si tel est le cas, essayez de migrer jusqu'à un point où cette table n'existait pas et remue-t-elle ensuite. P>
Tu as vraiment fait ma journée! Merci!
Si vous utilisez automapper et utilisez le mode pour / foreach, vous devez remettre à la boucle pour boucle.
Exemple: P>
foreach (var item in Ids) { var page = Mapper.Map<Pages>(model); . . . . db.Pages.Add(page); } db.SaveChanges();
Voulez-vous désactiver complètement les insertions d'identité? Ou juste pour votre méthode de semence?
Au départ, je pensais que pour la semelle seulement ... mais s'il y avait un moyen pour les premières migrations de code pour identifier la colonne ID comme clé primaire, mais avec une identité, cela serait également acceptable.
Utilisez-vous l'entitéypeconfiguration? Si oui, vous pouvez utiliser une propriété (x => x.id) .hasdatabaseGeneratedoption (base de donnéesGeneratedoption.non e). Vous pouvez éteindre cette option sur votre option sur votre ONModelCreat et cette.database.Initialiser (Force: True); dans le contructeur.