WalkerMedlem sedan okt. 2002188 inlägg Hejsan
Har ett antal objekt som jag vill spara i database.. Varje objekt har ett idnummer så är PK i databasen.. Detta vill jag inte att man skall kunna ändra på.. Då jag sparar ner objektet så skickar jag hela objektet till databaslagret
function void Save()
{
Dal.Save(this);
}
Databas lagret kollar sedan om detta är ett nytt objekt genom isNew propertiet ( stava e svårt på svengelska). Det skapar sedan ett objekt som kan lägga in posten i databasen.. Men jag behöver då få tillbaka PK som detta objekt fick då jag sparade det.. och jag behöver peta in det i fältet som håller detta, men som jag sa innan så vill jag inte att något annat skall kunna pilla på detta för att inte förstöra sakerna i databasen..
vet inte om detta låter vettigt..
Man skulle kunna göra så att Dal.Save returnerar idnummert men det känns inte helt perfekt.. men kanske detta är bästa lösningen..
Några andra ideér?
PMedlem sedan jan. 20012 204 inlägg Om du vill ha reda på om det är en PK? I mysql kan du ju skriva "Describe tabelname". Sen får du väl på något sätt ta och sätta det till ojektet.
WalkerMedlem sedan okt. 2002188 inlägg Hej..
Var nog lite otydlig innan.. så här kommer en annan vinkling på problemet..
Har två stycken objekt där det ena objektet innehåller det andra så att det ser ut så här. User.Role Varje objekt har ett antal properties som anger om det är nytt, har några förändringar och eller om det är borttaget. Dessa properties vill jag skall vara readonly så att man inte kan ändra dessa. (detta är kanske löjligt, men det känns mer stabilt att göra så). Samma sak gäller idnummert.. jag vill inte att man skall kunna ändra detta, då man kan skriva över andra objekt i database.. Säg till om ni tycker detta är knasigt.. Jobbade innan med ett projekt som var väldigt säkerhetsorienterat där du omöjligt kunde göra fel.. känns som man e lite skadad från detta.. :l
Problemet är jag inte vet riktigt hur jag skall ladda objekten eller hur jag skall spara dem.
Om ett objekt är nytt så skall det köras en insert i databasen, sen hämtar jag idnummert som jag fick och detta skall stoppas in i role objektet så att jag vet vilken användare som har detta, samt att jag behöver det i FK fältet i databasen.
Jag kan då göra på ett par olika sätt..
Om varje objekt har sin egen savemetod så anropas dessa separat, nackdelen är att jag inte kan köra databasuppdateringen i en transaction då, vilket jag vill. Alternativet är att i user objektets savemetod skickar hela objektet till databaslagret och där skapa ett objekt som innehåller alla sqlsatser och sedan kör uppdateringarna mot databasen i en transaction. Problemet är då att databaslagret inte kan ändra isnew, hasChanges värdena pga dessa är readonly, detta kan iofs köras i users savemetod men det fungerar bara i det egna objektet och inte i Role objektet.
Liknande problem får jag i loadmetoderna..
Då ett objekt laddas så skall isnew och hasChanges ändras och detta kan göras i load metoden, men bara för det egna objektet. Om jag har två olika loadmetoder så måste jag köra minst 2 anrop till databasen för att ladda alla objekten, fördelen är att jag uppnår att jag kan manipulera isnew, haschanges attributen.. Men jag tappar lite i prestanda..
Om varje objekt har sin egen load metod så, kan jag inte använda joins för att ladda objekten men jag får "säkrare" objekt, man kan inte ändra på isnew och haschanges.
/w