2009-08-30 5 views
1

Je suis un newbe SubSonic et j'écris ma première application avec. J'ai une base de données avec deux tables appelées Member et Club. La table Club comporte trois champs qui sont liés à la clé primaire (ID) de la table Membre (PresidentID, VicePresidentID et TreasurerID). Si je fais trois appels à Member.SingleOrDefault, ils renvoient tous des données valides. i.e. .:La requête SingleOrDefault renvoie null (parfois) même si les données sont là

President = Member.SingleOrDefault(x => x.ID == club.PresidentID); 
VicePresident = Member.SingleOrDefault(x => x.ID == club.VicePresidentID); 
Treasurer = Member.SingleOrDefault(x => x.ID == club.TreasurerID); 

SubSonic crée bien une propriété des membres de la classe d'enregistrement actif du club qui renvoie à la table des membres. Toutefois, si je fais les mêmes appels via la propriété Members de la classe Club activeecord, certains retournent des valeurs nulles. i.e. .:

President = Club.Members.SingleOrDefault(x => x.ID == club.PresidentID); 
VicePresident = Club.Members.SingleOrDefault(x => x.ID == club.VicePresidentID); 
Treasurer = Club.Members.SingleOrDefault(x => x.ID == club.TreasurerID); 

Un ou peut-être deux des appels de retour des données, mais les autres retourneront nulle. Cela se produit avec exactement les mêmes identifiants de membre, que fais-je tort?

Un grand merci pour les pointeurs.

Dave Head

Répondre

2

Je pense que ça se confondre avec la configuration IQueryable FK - ce qui signifie que ce n'est pas honorer toutes les clés étrangères lors de la création des IQueryables enfants.

Si vous avez SQL Profiler, il serait bon de savoir ce qui est généré sur ces appels. Pour l'instant, vous pouvez contourner cela en utilisant:

President = Members.SingleOrDefault(x=>x.ID==club.PresidentID && x.ClubID=club.ClubID); 
+0

Merci pour la réponse, Rob. Cela fonctionne effectivement. Je crois que SQL Profiler est disponible mais pas installé. J'ai une copie complète de SQL Server, mais seulement SQL Express installé sur ma boîte de dev. Je regarderai plus loin quand j'aurai un peu de répit. Dave –

Questions connexes