2010-10-26 19 views
2

J'ai une application .NET 4 WinForms qui utilise ADO.NET Entity Framework. Un code qui fonctionnait parfaitement a décidé d'arrêter de fonctionner et même si j'ai essayé de comprendre ce qui a changé cela pourrait causer cela, je suis perplexe. Ce code me semble parfaitement fonctionnel et fonctionnait comme prévu.ADO.NET Entity Framework SaveChanges ne fonctionne pas

Vous avez des idées? Voici le code:

using (var pe = new ProposalEstimateEntities()) 
{ 
    var tmc = GetToolingAndMaterialsCost(taskId, Constants.Materials); 

    if (tmc == null) return; 

    tmc.Amount = amount; 
    pe.SaveChanges(); 
} 

La variable tmc est titulaire d'un objet entité ToolingAndMaterialsCost après l'appel de méthode, donc il n'y a pas besoin d'ajouter l'objet au contexte. SaveChanges() devrait enregistrer l'objet avec le nouveau montant, mais ne le fait pas. Aucune exception n'est levée. Le code s'exécute comme s'il était bête et heureux, mais rien ne change dans la base de données et quand je retourne au contrôle qui affiche les données, les anciennes données de pré-édition sont là.

Ceci est très frustrant, toute aide serait grandement appréciée.

Mike

Répondre

1

Comment tmc a-t-il été chargé sans référence à ObjectContext 'pe'? On dirait que vous le chargez dans un contexte différent?

Si tel est le cas, cela ne fonctionnera pas. Le contexte suit les entités qui ont changé. Le contexte de 'vous' ne suit aucune entité du fait de son apparence, car il n'est jamais référencé sauf dans l'appel SaveChanges.

+0

Correct, le contexte utilisé pour charger l'entité est différent de celui utilisé dans l'appel SaveChanges. J'ai ajouté l'objet tmc à ce contexte et cela a fonctionné. – flyfisher1952

0

je un pas par w/le débogueur pour vous assurer que tmc n'est pas nul. Si tmc est en effet un objet entité avec un champ Quantité, cela devrait fonctionner correctement et le problème est probablement ailleurs. Comment le code de la méthode GetToolingAndMaterialsCost?

0

Doh! L'appel à GetToolingAndMaterialsCost utilise un objet ProposalEstimateEntities différent de celui de la méthode, donc j'ai simplement ajouté l'objet entité au contexte de données et cela a bien fonctionné. J'ai commencé moi-même quand j'ai refaçonné.