2009-07-24 8 views
6

Je jouais avec simple référentiel de Subsonic 3 et je frappais des murs pour comprendre comment gérer les clés étrangères ...Subsonic 3 - SimpleRepository

Si j'ai un objet produit contenant

int ID; 

string name; 

string description; 

Category category; 

int categoryID (this one is just to persist the product's categoryID to the DB) 

and a category object containing 

int ID; 

string name; 

Comment puis-je utiliser le référentiel pour ramener une liste de tous les produits avec leur objet de catégorie instancié?

Au moment où j'ai écrit une requête linq qui se joint sur product.categoryID = category.ID qui est très bien, mais quand je .ToList() les résultats de cette requête, la catégorie du produit n'est pas instanciée .

Existe-t-il un moyen de le faire, ou dois-je instancier manuellement la catégorie pour chaque produit?

Merci,

Paul

Répondre

6

vous devez obtenir LINQ pour le remplir,
en utilisant quelque chose comme
requête var = du produit en repo.All (Produit)
rejoindre la catégorieItem en repo.All (Catégorie)
sur le produit.CatégorieId eq UAL categoryItem.Id
sélectionnez Nouveau {
ID = product.ID,
name = product.name,
description = product.description,
categoryId = product.CategoryId
category = categoryItem
};

+0

Cela ressemble à la réponse ... va l'essayer ce soir, puis vous faire savoir fella Cheers man – Paul

+0

Salut Podge, merci pour votre aide. Pour refondre ceci à une liste de produits, devrais-je manuellement parcourir la liste et instancier un nouvel objet produit pour chaque résultat (qui est actuellement de type [type anonyme]) – Paul

+0

Il n'y a pas de moyen simple que je connaisse, sauf pour l'assigner manuellement comme vous le dites. Le type anonyme est uniquement lu en C#. L'autre option consiste à charger la catégorie séparément et à parcourir les produits. Vous pouvez mettre en cache la table Catégorie et ensuite vous ne frappez la base de données qu'une seule fois. Désolé, ce n'est pas la réponse que vous voulez. – Podge

Questions connexes