2010-10-20 7 views
3

J'ai la situation suivante:Entity Framework ne sauvera pas les relations

role.Permissions.Add(permission); 
objectContext.SaveChanges(); 

Quand je maintenant jeter un oeil dans le tableau des relations Roles_Permissions l'autorisation nouvellement ajoutée au rôle n'est pas présent. Il enregistre uniquement la nouvelle relation lorsque je dispose du contexte de l'objet. Est-ce que je fais quelque chose de mal ou est-ce qu'un appel à SaveChanges n'enregistre pas les changements sur les ensembles de relations?

+1

Utilisez-vous EF4 ou EF1.0? –

+0

J'utilise Entity Framework 4 – Mato

+0

Ce code semble très bien. Plus probablement, quelque chose d'autre cause un problème. Utilisez-vous POCO ou tout contexte objet personnalisé (ou unité de travail), ou vous utilisez le code EF standard gen d'une base de données? – RPM1984

Répondre

0

Il semble que vous utilisiez une transaction.

Les modifications apportées ne sont pas visibles en dehors de la zone de transaction jusqu'à ce que la transaction soit validée.

Et la portée de transaction n'est pas validée tant que le contexte d'objet n'est pas éliminé.

+0

Je n'utilise pas de transaction. Est-il possible que EF crée une transaction automatiquement? Si oui, puis-je obtenir la transaction en quelque sorte pour déclencher le commit? – Mato

+0

Vérifiez le constructeur ou les propriétés du contexte de votre objet. Mais vous devriez fermer votre contexte d'objet dès que possible, donc ce n'est probablement pas un problème. –

0

Vérifiez simplement s'ils sont dans le même objectContext.

0

Vous pouvez vous assurer que votre entité d'autorisation est connue à votre contexte d'objet en exécutant la ligne de code suivante:

objectContext.AddObject("Permissions", permission); 
1

Vérifiez la ObjectStateManager - avant d'appeler SaveChanges, un coup d'oeil sur le gestionnaire de l'état d'objet pour obtenir tous les changements qui ont un état Ajouté - il devrait retourner juste le seul élément qui est cet objet d'autorisation. Si ce n'est pas là, quelque chose d'autre est faux. L'appel à SaveChanges devrait continuer vos changements ici et là.

Questions connexes