2011-08-23 3 views
1

Mon programme ne cesse de lancer une InvalidOperationException avec l'erreur « La valeur NULL ne peut pas être attribué à un membre de type System.Boolean qui est un type de valeur non nulle ». Je n'arrive pas à comprendre cela car mon code n'essaie pas d'assigner quoi que ce soit, il suffit de parcourir une liste et de générer une chaîne de tous les numéros de réclamation (ou de renvoyer une chaîne vide si la demande n'a pas de revendications associées): Essayer de débogage InvalidOperationException

public string ClaimNumbers 
{ 
    get 
    { 
     if (Enquiry.Claims != null && Enquiry.Claims.Count>0) 
     { 
      var sb = new StringBuilder(); 
      foreach (var claim in Enquiry.Claims) 
      { 
       sb.Append(claim.ClaimId.ToString("00000") + ", "); 
      } 
      return sb.ToString().Substring(0, sb.Length - 2); 
     } 
     return string.Empty; 
    } 
} 

la chose étrange est que lorsque je fais un pas par le code dans le débogueur et essayez de développer Enquiry.Claims.Count, je vois:

enter image description here

Mais quand je fais une pause un peu et graviront la ligne suivante devient:

J'utilise Linq pour Sql, et Claims est un ensemble d'entités, donc je me demandais si c'était peut-être quelque chose à voir avec tirer les données de la base de données, mais je ne suis pas sûr, donc je ne peux pas penser quelle est la meilleure façon d'y remédier?

+0

Pas trop sûr de ce qui cause l'erreur réelle, mais je voulais signaler que planant votre souris sur les propriétés (et/ou ayant la fenêtre automobile ouverte) ne change le comportement de votre application par des propriétés d'appel avant de pouvoir entrer dans les ! (et en contournant les points d'arrêt pour son propre petit coup d'oeil) –

+0

J'ai vu cela assez fréquent avec Linq2SQL, en particulier sur SQL CE. Cela signifie probablement que la requête a expiré lorsque le débogueur demandait une valeur. – leppie

Répondre

0

Je suppose que la table CLAIMS a une colonne mappée à une propriété booléenne dans votre entité Claims et que cette colonne contient au moins une valeur NULL.

+0

Merci, j'étais stupide et je n'avais pas supprimé toutes les valeurs nulles dans ma table avant de mettre le champ à non-nul dans linq à sql! –

+0

@Jordan: En fait, la chose vraiment "stupide" ici, c'est que vous définissez la colonne non-null dans Linq2Sql mais pas dans la base de données. Si vous aviez rendu la colonne dans la base de données non nulle, vous auriez été informé du fait qu'il existe des lignes avec des données invalides. –

+1

Ouais, c'était en fait un collègue qui a fait les changements de la base de données et qui ne les a pas validés, bien que je devrais certainement avoir vérifié la base de données lorsqu'on lui a demandé de mettre à jour le dbml. Leçon apprise! –

0

C'est le plus probablement arrive parce que vous utilisez LINQ to SQL, ou quelque chose comme ça, et sur cette ligne exacte de la collection résultante est nulle, ce qui forcera à LINQ moteur pour initialiser la valeur de retour avec null. Il lance donc une exception. Pour résoudre ce problème, très probablement, regardez comment le Count de la collection va être récupéré et déclarez le nullable avec "?".

Espérons que cela aide.

Questions connexes