2011-02-15 2 views
3
context.Database.SqlCommand("SET IDENTITY_INSERT [Songs] ON;"); 

juste avant de faire la méthode Add (la méthode Add de DbSet).IDENTITY_INSERT ON non respecté pour Entity Framework DBSet.Add méthode

Mes données utilisent toujours la valeur d'identité au lieu de l'ID que je fournis. Je ne veux que cela temporairement (pour la migration de données), puis il devrait rester l'identité générée automatiquement à l'avenir. J'utilise SQL CE 4 pour ma base de données.

+0

Question similaire à http://stackoverflow.com/questions/13086006/how-can-i-force-entity-framework-to-insert-identity-columns – Jez

Répondre

3

EF ne peut pas deviner que vous avez exécuté une commande IDENTITY_SET et que vous modifiez sa logique interne en conséquence.

Si vous devez insérer des valeurs d'ID spécifiques, utilisez également SqlCommand pour les insertions.

+0

+1 Je crois que ce sera la bonne réponse. –

+0

C'est ce que j'ai fini par faire. Je devais utiliser SqlCeCommand. Je voulais garder mon code indépendant de la base de données, mais je suppose que je ne peux pas. – ajma

+0

Eh bien, SET IDENTITY_INSERT n'est pas particulièrement db-agnostique de toute façon :-) –

4

Cela peut être un problème. DbContext gère la connexion db elle-même. Cela ne fonctionne que si les insertions sont exécutées sur la même connexion que l'activation de l'insertion d'identité. Je pense qu'il libère la connexion après cette commande. Vous pouvez essayer d'utiliser le constructeur différent de DbContext et passer votre propre instance DbConnection ouverte et gérer vous-même sa fermeture.

Questions connexes