2010-01-13 3 views
4

Lorsque vous attendez un jeu d'enregistrements (> = 1 enregistrement), comment vérifiez-vous cette situation d'enregistrement 0?Entity Frameworks - ToList() et 0 enregistrements

Par exemple:

RivWorks.Model.FeedStoreReadOnly store = new RivWorks.Model.FeedStoreReadOnly(AppSettings.FeedAutosEntities_connString, AppSettings.FeedAutosEntities_metadata, AppSettings.FeedAutosEntities_providerName); 
RivWorks.Model.NegotiationAutos.Entities _dbFeed = store.ReadOnlyEntities(); 
var companyDetails = from a in _dbFeed.ClientClientMap where a.CompanyID == CompanyId select a; 
return companyDetails.ToList(); 

Lorsque cela retourne est erroring sur le ToList() parce qu'il n'y a pas de documents qui satisfont la clause WHERE. Alors, quelle serait la bonne façon de vérifier 0 enregistrements et quel serait le retour recommandé à ce moment-là?


addition à base de réponse ci-dessous:

if (companyDetails.Count() > 0) 
    return companyDetails.ToList(); 
else 
{ 
    List<RivWorks.Model.NegotiationAutos.ClientClientMap> ret = new List<RivWorks.Model.NegotiationAutos.ClientClientMap>(); 
    ret.Add(companyDetails.FirstOrDefault()); 
    return ret; 
} 

ont pas encore testé mais (logiquement) semble fonctionner. Vous vous demandez s'il y a un moyen plus facile cependant.


NOTE:

Je l'ai compris. Le compte sous lequel SQL était en cours d'exécution n'a pas reçu le jeu d'autorisations correctes par le DBA. Nous avons modifié toutes les instructions GRANT sur les nouvelles tables/vues et cela fonctionne maintenant.

Je ne suis toujours pas sûr de la bonne réponse. Je me penche vers la création d'un vide (nouveau) enregistrer et ajouter à la liste afin que nos gars reçoivent la liste ont quelque chose à afficher (pour modifier si rien d'autre) ...

+0

Êtes-vous sûr de l'exception? il ne devrait pas faire d'erreur, il devrait retourner une liste avec 0 enregistrements dedans. –

+0

Quelle est l'exception que vous obtenez? – mxmissile

+0

Sur l'exception interne, j'obtiens "Nom d'objet invalide 'dbo.ClientClientMap'". Je ne comprends pas cette erreur car je peux voir l'objet dans mon modèle et je peux très bien le référencer. –

Répondre

5

Vous n'avez pas besoin de vérifier pour vide avant d'appeler ToList. ToList fonctionne très bien avec une requête qui ne renvoie aucun enregistrement; il retournera simplement une liste vide. Vous pouvez utiliser votre code d'origine et tout fonctionnera correctement, avec ou sans données dans le tableau.

La plupart des grilles et similaires vont aussi bien s'adapter à une liste vide; ils affichent généralement une ligne vide pour l'utilisateur pour créer le premier enregistrement.

0

table ClientClientMap est pas dans la base de données

+0

au contrair. Il est en effet dans la base de données et est une vue. Mes modèles sont générés via l'assistant EF et je n'ajoute aucun autre objet dérivé de la base de données. Je rencontre ce problème avec plusieurs objets liés aux tables. –

+0

@Keith, peut-être votre schéma d'entité n'est pas mis à jour, mais votre exception n'a rien à voir avec un résultat vide, pour tester cette tentative de retourner un résultat avec des lignes.Vérifiez également votre chaîne de connexion, assurez-vous de pointer vers la bonne base de données. –

+0

Les autorisations (SELECT/UPDATE) n'ont pas été définies pour le compte sous lequel la requête était exécutée dans SQL Server (voir ci-dessus). –

0

Une autre cause peut être que la chaîne de connexion à la base de données contient un nom de base de données différent de celui que vous avez l'intention d'utiliser. Entity Framework (s'il est configuré avec les droits pour le faire) crée simplement une base de données différente en fonction de la chaîne de connexion configurée, et il peut arriver que la table que vous interrogez soit vide.

Questions connexes