2010-09-13 6 views
2

J'ai une base de données SQLCe qui avait un ID de clé primaire unique avec le type uniqueidentifier, et la relation enfant, 1 à plusieurs, où je conserve l'identifiant principal dans une colonne et ajoute l'identifiant unique pour chaque rangée aussi. Maintenant j'utilise des entités POCO pour mon modèle de domaine NOT STE. Alors que l'ajout et la modification d'entités fonctionne bien, j'ai du mal à supprimer, disons pour l'instant des enregistrements enfants individuels, où bien sûr supposé qu'ils ont leur propre clé primaire. Dès que je donne la liste supprimée et itérez chaque entité pendant que la première entité est attachée, dans la seconde j'obtiens l'exception:Entity Framework 4, SQLCe avec le problème POCO sur la suppression

Un objet avec la même clé existe déjà dans ObjectStateManager. ObjectStateManager ne peut pas suivre plusieurs objets avec la même clé.

Je devrais mentionner que je fais d'abord ajouter et modifier des entités à la base de données tout en ouvrant un contexte ... disposer et appeler une autre méthode de suppression où bien sûr ouvre un autre contexte et finit par se débarrasser.

Quel est le sens de cette exception que je n'obtiens pas?

Répondre

0

Cette exception se produit lorsque vous avez deux instances différentes de la même entité dans votre graphe d'objets. Cette exception se produit également dans STE mais il existe une solution de rechange pour cela. Fondamentalement, vous avez deux entités (POCO), chacune avec une relation avec une troisième entité. Lorsque vous essayez d'associer la première entité à la seconde et essayez de la conserver dans le contexte d'entité, les deux entités auront une instance distincte du troisième et c'est là que se trouve l'erreur.

travail autour:

Avant de faire l'association entre les deux entités, essayez de « fusionner » les entités liées ensemble. C'est ainsi que le contexte d'entité n'a pas besoin de décider quelle instance de "l'entité commune" doit persister.

Exemple:

A, (B1, B2), C sont des entités.

A - B1

C - B2

A - B1 - C

Dans ce scénario, B1 et B2 sont les deux entités B, des cas seulement différentes (peut être due à différents appels au magasin de données à travers différents contextes). Lorsque vous souhaitez associer A et C, vous devez choisir de supprimer B2 et de lier C à B1.