Best practice ang. nestede SQLConnections

Tags:    c#

Hej Forum,

Jeg har lavet en webapplikation som skal vedligeholde data i en mssql 2008 database.

Jeg har lavet C# klasser som stort set svarer til tabellerne i databasen. Jeg populerer så disse klasser via SQLReader.

Mit spørgsmål er så, hvis jeg fx har en fremmedngøle på tabellen "Bruger" til tabellen "Firma", og jeg gerne vil populere min Bruger C#-klasse med et "Firma" objekt, så gør jeg følgende:

Henter alle rækker i bruger tabellen.
Opretter et ny brugerobjekt per række i readeren. For hver bruger-objekt vil jeg tilføje et Firma objekt så jeg fx. via kode kan kalde:

Bruger b = new Bruger(id,navn,firma);
b.Firma.NavnPåFirma.

Dette gør så at jeg har mange åbne connections på én gang da jeg i hvert while loop åbner endnu en connections hvor jeg henter en række fra Firma tabellen som passer til fremmednøglen på Bruger-rækken.

Det virker, det er lækkert og koden skal kun ændres 1 sted. Men performance mæssigt har jeg mine tvivl om at dette er den bedste måde at gøre dette på.

Er der nogen der har erfaringer med at gøre dette på en anden måde?

Mvh

Kenneth



6 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Hvis du nu bruger samme forbindelse i alle dine "business-objekter" og tjekker på følgende måde når du åbner:

Fold kodeboks ind/udKode 


Så har du altid kun den ene forbindelse åben og så er det bare at lukke den på "et passende" tidspunkt.



Selvfølgelig! Det har jeg aldrig tænkt over.

Tak, det vil jeg prøve snarest :)

Så der er i princippet ikke noget galt i at lave nestede kald til databasen?



Jeg kan ikke se problemer med det - med jeg har også kun kodet skidtet i et års tid :B



Jeg kan ikke se problemer med det - med jeg har også kun kodet skidtet i et års tid :B


Nej ok, men stadig. Jeg kan godt lide idéen. Der er selvfølgelig en potentielt risiko i at ramme connection timeout hvis der fyldes nok på.

Men nu vil jeg prøve det.



Der ingen potentiel risiko for at ramme conection timeout. På SqlConnection findes en ConnectionTimeout property, men den er kun bestemmende for hvor lang tid der må gå med at forsøge at åbne en connection.

På SqlCommand findes CommandeTimeout, som angiver hvor lang tid en enkelt kommando må tage. Default er vist 30 sekunder.



Brug LINQ to SQL, meget nemmere :)



t