2009-07-24 3 views
6

ich um einfaches Repository mit Subsonic 3s spielte und Wände am Schlagen zu verstehen, wie mit Fremdschlüssel beschäftigen ...Subsonic 3 - SimpleRepository

Wenn ich ein Objekt Produkt

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; 

enthält Wie Kann ich das Repository verwenden, um eine Liste aller Produkte mit ihrem instanziierten Kategorieobjekt zurückzubringen?

Im Moment habe ich eine linq-Abfrage geschrieben, die auf product.categoryID = category.ID, die alle gut und gut ist, aber wenn ich .ToList() die Ergebnisse dieser Abfrage, die Produktkategorie nicht instanziiert ist .

Gibt es eine Möglichkeit, dies zu tun, oder muss ich die Kategorie für jedes Produkt manuell instanziieren?

Danke,

Paul

Antwort

6

Sie Linq um es zu füllen bekommen müssen,
etwas wie
var Abfrage = aus Produkt in Repo.Alle (Produkt)
join categoryItem in repo.All (Kategorie)
auf product.CategoryId eq uals categoryItem.Id
wählen neue {
ID = product.ID,
name = product.name,
description = PRODUCT.DESCRIPTION,
categoryId = product.CategoryId
category = CategoryItem
};

+0

Das klingt nach der Antwort ... werde es heute Abend versuchen, dann lass es dich wissen fella Cheers man – Paul

+0

Hallo Podge, danke für deine Hilfe. Um dies zu einer Liste von Produkten umzuformulieren, muss ich manuell durch die Liste gehen und ein neues Produktobjekt für jedes Ergebnis instanziieren (das derzeit vom Typ [anonymer Typ] ist) – Paul

+0

Es gibt keinen einfachen Weg, den ich kenne, außer es manuell zuzuweisen, wie Sie sagen. Der anonyme Typ wird nur in C# gelesen. Die andere Möglichkeit besteht darin, die Kategorie separat zu laden und durch die Produkte zu iterieren. Sie können die Kategorietabelle zwischenspeichern und dann nur einmal auf die Datenbank zugreifen. Entschuldigung, es ist nicht die Antwort, die Sie wollen. – Podge