2010-12-13 4 views
0

J'ai un problème Im en cours avec EF et SQL. J'ai un proc stocké fou qui ne se traduit pas bien au code C# (EF/LINQ). Fondamentalement, ce que je fais est d'appeler le proc stocké avec un appel SqlConnection et SqlCommand (System.Data.SqlClient) [Voir ci-dessous] puis tirer les données de la table en utilisant EF. Cela arrive encore et encore jusqu'à ce qu'une table principale soit épuisée. (J'ai une table principale avec plusieurs centaines de milliers d'enregistrements et le proc stocké tire une petite partie de cela et le met dans une table à traiter, une fois traitées, ces enregistrements sont supprimés de la table principale et il va tout recommencer jusqu'à ce que le la table principale a été complètement traitée).La table ne se met pas à jour dans EF lors de la mise à jour avec un appel SQL?

Le problème est que la table n'est jamais mise à jour en C#, mais qu'elle est mise à jour sur le backend.

Alors, voici l'appel SQL:

SqlConnection sqlConn; 
    SqlCommand sqlCommand; 

    using (sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["AppMRIConnection"].ConnectionString)) 
    { 
     using (sqlCommand = new SqlCommand(String.Format("EXEC sp_PullFinalDataSetPart '{0}', '{1}'", sLocation, sOutputFileType), sqlConn)) 
     { 
      sqlConn.Open(); 
      sqlCommand.ExecuteNonQuery(); 
      sqlConn.Close(); 
     } 
    } 

qui tronque la table FinalDataSetPart et re-charge avec de nouveaux records X.

C'est l'appel en C#

List<FinalDataSetPart> lstFinalPart = db.FinalDataSetPart.ToList(); 

Cet appel toujours obtenir la première table finaldatasetpart chargée indépendamment de ce qui est en fait dans le tableau. Cet appel est correctement dans la boucle (je peux entrer dans le code et le voir appeler cette méthode à chaque itération de la boucle).

Quelqu'un at-il déjà vu quelque chose comme ça?

Toutes pensées/aide/conseils seraient grandement appréciés.

Merci!

+1

Je suggère de démarrer SQL Profiler et de faire un peu de surveillance. Il est possible que votre contexte EF ne fasse que l'appel initial alors que les appels suivants renvoient simplement des objets qui sont maintenant en mémoire. – e36M3

Répondre

0

L'ID est-il modifié dans la table temporaire lorsque vous insérez de nouvelles données? EF ne détectera pas les modifications apportées aux données si les ID principaux ne changent pas.

Voulez-vous supprimer et recréer le contexte chaque fois que vous saisissez de nouvelles données?

+0

Ouais, j'ai dû abandonner et recréer le contexte. Je suppose que j'avais raté cette étape! Merci! – SlackerCoder

Questions connexes