2010-06-03 9 views
0

Le code suivant me donne un SqlException: Nom d'objet incorrect 'dbo.studentsCourses'Comment faire fonctionner cette requête LinqToSQL? (SqlExecption)

 
OO theCourse = subject.Course; 
var students = dc.studentsCourses.Where(x => x.course == theCourse).Select(x => x.student); 

j'ai essayé le code suivant à la place, mais je reçois aussi une exception. Ma question initiale a été posée sur Aardvark et peut être lu ci-dessous:

 
var allStudents = from s in dc.students select s; 
List thestudents = new List(); 
foreach (student s in allStudents) 
{ 
    if (s.courses.Contains(theCourse)) 
    { 
    thestudents.Add(s); 
    } 
} 

J'ai fait un clic droit, « exécuter l'outil personnalisé » sur mon dbml et vérifié mes noms de mes tables et entités. Le projet compile mais j'obtiens une exception à l'exécution sur cette ligne: "if (s.courses.Contains (theCourse))" Des idées?

question originale sur Aardvark:

Comment puis-je faire une requête LinqToSQL que me donne ceci: Je veux sélectionner tous les étudiants qui ont assisté à une certaine leçon. La leçon est d'un certain cours . Donc, sélectionnez le cours de la leçon . Maintenant, sélectionnez tous les étudiants qui suivent ce cours . Il y a une relation plusieurs-à-plusieurs entre les étudiants et la table des cours dans ma base de données. Je l'ai déjà étendu mes entités LINQ pour être en mesure pour sélectionner student.Courses et course.Students utilisant cette méthode: http://www.codeproject.com/KB/linq/linq-to-sql-many-to-many.aspx

+0

Que dit l'exception SqlException? – Marc

+0

sont les deux exceptions les mêmes? – Steven

+0

"Nom d'objet invalide 'dbo.studentsCourses'." En ce moment je ne regarde plus ce problème parce que je l'ai résolu en utilisant une solution de contournement. Hors sujet: Comment puis-je marquer cette question comme «résolue» et comment puis-je lier à une réponse à une réponse, pas la réponse elle-même? – kversch

Répondre

0

Votre lien vers les classes sql ne correspondent pas à votre schéma db ou votre DB ne pas contenir une table ou une vue appelée studentcourses. Vous devez ajuster vos classes ou db pour qu'elles correspondent.

+0

J'ai décidé de remplacer CTRL-F par tous les cours avec student_courses (le nom de la table) partout. Je ne comprends pas comment cela s'est arrangé mais c'est OK maintenant. – kversch

+0

Btw, le nom doit exister en tant qu'entité LinqToSQL, pas nécessairement en tant que table dans votre base de données, non? – kversch

+0

L'erreur était provoquée par le fait que LinqtoSQL générait du code SQL qui faisait référence à un objet de base de données inexistant, dans ce cas une table. Cela a dû être dû au fait que vous aviez une classe mappée à une table inexistante, probablement parce que le nom de la table de base de données avait changé à un moment donné. Vos entités LinqToSQL n'ont pas besoin d'être nommées de la même manière que leurs tables de base de données correspondantes, mais elles ne peuvent pas être mappées à des tables de base de données qui n'existent pas. –

0

Vous pouvez commencer à déboguer ce problème en visualisant la requête générée par LinqToSQL. Le Gu a écrit un blog sur ce sujet: http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx

Il suffit de copier/coller la requête dans votre application de gestion de base de données préférée et de l'exécuter dans la base de données. Il devrait devenir clair quelle est l'erreur. S'il y a encore des choses folles, mettez juste à jour votre question?

Espérons que cela aide!

0

Commencez par vérifier votre base de données pour voir s'il y a vraiment un nom de table ou de vue studentsCourses. S'il y a alors essayer de régénérer en fichier dbml, puis réessayer.

0

Je ne suis pas sûr ... mais vous pouvez essayer celui-ci:

var xxx = dc.Include ("studentsCourses") .studentsCourses .Lorsque (x => x.course == thecourse .Sélectionnez (x => x.étudiant) .ToList();

Questions connexes