Någon som har lite bra idéer på hur man bäst fyller nästlade collections? Desto färre anrop till databasen desto snabbare, men det vet du ju redan... Och är du ute efter effektivitet så borde du ju använda en datareader istället. Patrik,Nästlade collections
Ex.
Jag har ProjectCollection som innehåller objekt av typ Project. Projectobjektet innehåller en UserCollection med projektanvändare.
Om jag ska ha fram ett projekt så kör jag en stored procedure som tar emot ett projektid, hämtar data och kör sedan en annan stored procedure som tar emot ett projektid och returnerar alla projektanvändare. Resultatet får jag ut i två tabeller i ett DataSet.
Sedan så skapar jag ett UserObject med data från första tabellen och loopar sedan igenom tabell 2 och fyller min UserCollection och stoppar in den i Projectobjektet.
Nu till problemet.
Om jag ska ha en ProjectCollection så måste jag hämta alla projekt och sedan alla användare för varje projekt. När jag fyller min collection så får jag för varje rad skapa ett objekt och sedan anropa databasen och hämta användarna för det projektet. Det kan bli många anrop.
ELLER så kan jag i min SP som hämtar alla projekt köra en SP som hämtar alla användare från alla projekt. Då har jag ett DataSet med två tabeller. När jag sedan loopar igenom tabell 1 och skapar mina projektobjekt kan jag göra en SELECT på tabell 2 och få ut användarna som hör till det aktuella projektet.
Prestandamässigt, vilket är att föredra?
Extra anrop mot databasen eller en SELECT i en DataTable?
Eller finns det några andra knep att fylla nästlade collections?
/pD
www.pdc.se
www.pdc.se/blog
www.patrik-dahlen.nuSv: Nästlade collections
Annars finns det lite olika sätt. Är det relativt få användare kan du ju ladda alla med ett anrop, sen ladda alla projekt och sen plocka ut dina användare som redan är laddade i nån sorts collection.
Jag gör som du beskriver i din ursprungsversion (flera frågor) just nu i en applikation och tänker byta tillvägagångssätt om jag tycker att det blir slött :)Sv: Nästlade collections
Det beror lite på hur din applikation "ser ut", hur många användare det handlar om och hur ofta information uppdeteras i den. Det handlar hela tiden om en Prestanda Vs. Tillförlitlighet.
Prestanda: Att ladda in all information på en och samma gång sparar dig en massa vändor till databasen. I ett trafikerat nätverk eller om databasaen nås över WAN så vill man inte ha ett "chatty" nätverksinterface utan ett "chunky" där mycket information skickas ofta.
Tillförlitlighet: Man vill undvika att användare A inte sitter och arbetar med information som användare B redan har uppdaterat sen informationen lästes in. Detta går givetvis att lösa genom att ha tidstämplar på alla poster i databasen men då dyker problemet upp hur man skall hantera vilken av informationen som skall sparas till databasen.
Du får analysera kraven och användningsscenariot för din applikation och fatta ett beslut kring detta. Hoppas detta varit till någon hjälp!
//Andreas