2015-11-21 1 views
2

EDIT 3Dépannage SqlException

Pour être clair, à ce stade:

1) Je vois des exceptions SQL dans la sortie, mais il n'est pas "Catching" aucune exception ... le code est exécuté normalement et la seule raison pour laquelle je sais qu'il y a des exceptions est que je regarde la fenêtre de sortie. L'entité semble fonctionner pour la lecture initiale (elle a retourné les données attendues).

2) Entité se bloque quand j'essaie de faire un .SaveChanges mais je ne peux pas sembler "attraper" des exceptions ... il se bloque juste. Aucune idée pourquoi?

Original Post J'ai une application console C#, en utilisant .Net 4.5 en utilisant Entity Framework 6.1.3

Je suis capable de lire ma base de données donc je sais la chaîne de connexion et les informations d'identification sont corrects. Mon problème est que quand je fais un DbContext.SaveChanges() mes blocages d'applications et si je suspends mon curseur sur la méthode SaveChanges dans Visual Studio, le pop-up montre qu'il a jeté:

System.Data.Entity.InfrastructureDbUpdateException 
System.Data.Entity.InfrastructureConcurrencyException 
System.Data.Entity.Validation.DbEntityValidationException 
System.NoSupportedException 
System.ObjectDisposedException 
System.InvalidOperationException 

J'ai essayé de capturer un peu d'entre eux selon le code ci-dessous, mais en lisant d'autres articles SO, il semble que je ne peux pas attraper ces exceptions? Est-ce que quelqu'un sait comment les attraper?

S'il vous plaît noter que avant de faire ces SaveChanges, je était capable de lire d'une autre table donc je sais que mes lettres de créance et chaîne de connexions travail et que j'ai la connectivité et l'entité semble au moins travailler. Une autre information: celle-ci fonctionnait il y a quelques jours ... Je ne sais pas ce que j'aurais pu faire pour "casser"! Utiliser SQL Server sur un autre serveur.

chaîne de connexion est la suivante:

<add name="DataContext" 
    connectionString="data source=1.2.3.4;initial catalog=db1;user id=user1;password=pwd1;MultipleActiveResultSets=True;App=EntityFramework" 
    providerName="System.Data.SqlClient" /> 

ligne est donc en bas que mon application se bloque lors de l'exécution .SaveChanges et je ne sais pas pourquoi ...

try 
{ 
    return _context.SaveChanges(); 
} 
catch (DbUpdateException e) 
{ 
    Console.WriteLine(e.ToString()); 
    Console.ReadLine(); 
    return 0; 
} 
catch (DbEntityValidationException dbEx) // added for debug. 
{ 
    foreach (var validationErrors in dbEx.EntityValidationErrors) 
    { 
     foreach (var validationError in validationErrors.ValidationErrors) 
     { 
      Trace.TraceInformation("Property: {0} Error: {1}", 
            validationError.PropertyName, 
            validationError.ErrorMessage); 
      Console.WriteLine(string.Format("Property: {0} Error: {1}", 
              validationError.PropertyName, 
              validationError.ErrorMessage)); 
      Console.ReadLine(); 
     } 
    } 

    return 0; 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e.ToString()); 
    Console.ReadLine(); 
    return 0; 
} 

EDIT 1

Les exceptions sont confirmées comme n'étant pas réelles. Il s'agit d'une fenêtre pop-up fournie par ReSharper ou MS Productivity pour me montrer des exceptions possibles ... Je suppose.

Donc, je suis juste avec un accrocher .SaveChanges sans moyen de savoir pourquoi?

EDIT 2

je vois que, dans la première lecture de la base de données, la fenêtre de sortie de débogage montre des exceptions, même si la lecture a fonctionné! Notez que cela se trouve également dans un bloc try/catch (Catch (Exception e)) et que les exceptions ne sont PAS interceptées!

Une première chance exception de type 'System.Data.SqlClient.SqlException' a eu lieu dans System.Data.dll
Une première exception chance de type « System.Data.Entity.Core.EntityCommandExecutionException » a eu lieu dans EntityFramework.dll
Une exception de première chance de type 'System.Data.Entity.Core.EntityCommandExecutionException' a eu lieu dans EntityFramework.SqlServer.dll

+0

Vérifiez le message InnerException et modifiez votre publication pour l'ajouter. – CodeNotFound

+0

Comment? Je ne peux même pas attraper l'exception extérieure. Je sais juste qu'il y a des exceptions en passant ma souris sur SaveChanges mais l'application est bloquée. –

+0

Ensuite, cliquez sur "Afficher les détails" lorsque vous passez la souris dessus – CodeNotFound

Répondre

0

problème est que vous êtes dans le e.ToString(). Vous voulez vérifier la propriété e.Message. Vous pouvez également vérifier s'il existe une exception e.InnerException.

catch (Exception e) 
{ 
    if (e.InnerException != null) { 
     Console.WriteLine(e.InnerException); 
    } else { 
     Console.WriteLine(e.Message); 
    } 

    Console.ReadLine(); 
    return 0; 

} 
+0

J'apprécie la tentative ... mais comme je l'ai dit, je n'arrive même pas à la Catch. –