Nickemannen skrev:
Vad är problemet med att om SessionFactory'n hade varit static?
Det är inget problem så länge du inte accessar propertys så som du visade exemplet där du satt en databas och sedan en kopplingsträng.
// Sätts vid uppstart.
DataAccessLayerFactory.DatabaseType = DatabaseType.MySql;
DataAccessLayerFactory.ConnectionString = "....";
// Detta är när en instans skall hämtas.
IDataAccessObject dataAccessObject = DataAccessLayer.CreateInstance();
Är inte trådsäker kod. Eftersom Det rent teoretisk skulle kunna finnas en annan sida som hade följande kod:
// Sätts vid uppstart.
DataAccessLayerFactory.DatabaseType = DatabaseType.Access;
DataAccessLayerFactory.ConnectionString = ",,,,,,,,,,";
// Detta är när en instans skall hämtas.
IDataAccessObject dataAccessObject = DataAccessLayer.CreateInstance();
Och först körs dina två propertygets från första kodsnutten, sedan skiftas trådarna och de 2 property gets i nedersta kodsnutten körs och sedan får första tråden köra sin CreateInstance() kod, vilken databas kommer nu översta kodsnutten vara kopplad mot? Just det mot en Accessdatabas med kopplingsträngen ",,,,,,".
nickemannen skrev:
Varför är det dåligt att lägga ett objekt i Context.Items?
Det är inte dåligt om jag missförstod dig, jag förstod dig dock som att detta objekt som du har lagt i context.Items håller en öppen koppling mot databasen, och det är dåligt. Om den inte håller en öppen koppling utan öppnar och stänger koppling vid varje anrop så är det inte dåligt att hålla objektet i context.Items
nickemannen skrev:
Sedan om man lägger en session som öppnas i BeginRequest och som stänges i EndRequest så tror jag faktiskt inte att man förlorar så kraftigt mycket prestanda?
Det beror på vad du menar med en session? Om du har en öppen koppling till din databas från BeginRequest till EndRequest och det är samma koppling, så är det en extremt dålig ide. Inte för låganvändar siter, men ur skalbarhetsynpunkt är det förödande att göra något sådant.
nickemannen skrev:
Det där med trådar, jo du kan ha en poäng där, man få se till att göra sitt bl/dataaccesslager trådsäkert
Japp, och det enklaste sättet är att inte använda statiska objekt/metoder, eller om man använder dem, inte accessa några variabler i samma klass utan för den egna metoden.
- M