Detta ger mig huvudvärk...någon som kan förklara detta på svenska? Inverse anger vem som äger en realtion och vilken klass som skall hanterade denna. Tack för svaret, har jag fattat det rätt.... "Om jag sparar BIL och vill att även dess HJUL ska sparas då bör väl BIL äga relationen? " "Om jag sparar BIL och vill att även dess HJUL ska sparas då bör väl BIL äga relationen? " Det senaste svaret gäller.. skulle editera felet å då blev det ett inlägg till :) "Om jag sparar BIL och vill att även dess HJUL ska sparas då bör väl BIL äga relationen? "nHibernate inverse = true ?
Sv: nHibernate inverse = true ?
Säg att du har två klasser, HJUL och BIL, en HJUL klass har en relation tillbaka till BIL och en BIL kan ha flera HJUL. Om du då anger Inverse=true för collectionen HJUL i BIL klassen så kommer HJUL att hantera uppdateringen, anger du Inverse=false så skall kommer BIL att hantera relationen, rekommenderar att du har Inverse=true på dina collectioner då du minskar antalet sql frågor som körs.
Hoppas det klarnade?
Sv:nHibernate inverse = true ?
Om jag sparar BIL och vill att även dess HJUL ska sparas då bör väl BIL äga relationen?
Alltså inverse=false -- BIL äger relationen.
Säg att jag hämtar en BIL från db. Denna har då med sig sina hjul, jag vill sedan lägga till ett reservhjul och byta färg på bilen. Jag spara BIL objektet. Det nya hjulet läggs till och bilen byter färg, eller?
OM jag sätter inverse=true.
Måste jag då först spara bilen och sedan spara hjulet för sig för att lägga till detta?
Sv: nHibernate inverse = true ?
Du kommer då att köra en sqlsats mer än vad som behövs. Ur ett objektperspektive så äger båda relationen, men titta på det som skapas i databasen, då ser du att HJUL har en FK till PK'n i BIL klassen.
Du lägger till ett hjul till och ändrar färgen.
Inverse=false
1. NH kommer att spara ner bilen och dess färg.
2. NH sparar ner det nya hjulet och samtidigt så skapar NH relationer.
Inverse=true
1. NH kommer att spara ner bilen och dess färg.
2. NH sparar ner det nya hjulet och sätter skapar relationer.
3. NH uppdaterar relationen mellan hjulet och bilen.
Om du måste spara bilen och sedan spara hjulet? Detta skall inte behövas. Kontrollera vad du har satt för cascade nivå på HJUL collectionen, testa att sätta ALL. Kontrollera också att du verkligen sätter relationerna rätt för objekten. dvs när du lägger till ett hjul för en bil så.
myCar.Wheels.Add( spareWheel);
spareWheel.Car = myCar;
Inverse anger hur relationer skall hanteras och cascade anger hur NH skall nå objekten.
Om du har ett konkret problem så skicka ett im till mig så får du min msn där å så kan vi ta det där.
/patrikSv: nHibernate inverse = true ?
Du kommer då att köra en sqlsats mer än vad som behövs. Ur ett objektperspektive så äger båda relationen, men titta på det som skapas i databasen, då ser du att HJUL har en FK till PK'n i BIL klassen.
Du lägger till ett hjul till och ändrar färgen.
Inverse=true
1. NH kommer att spara ner bilen och dess färg.
2. NH sparar ner det nya hjulet och samtidigt så skapar NH relationer.
Inverse=false
1. NH kommer att spara ner bilen och dess färg.
2. NH sparar ner det nya hjulet och sätter skapar relationer.
3. NH uppdaterar relationen mellan hjulet och bilen.
Om du måste spara bilen och sedan spara hjulet? Detta skall inte behövas. Kontrollera vad du har satt för cascade nivå på HJUL collectionen, testa att sätta ALL. Kontrollera också att du verkligen sätter relationerna rätt för objekten. dvs när du lägger till ett hjul för en bil så.
myCar.Wheels.Add( spareWheel);
spareWheel.Car = myCar;
Inverse anger hur relationer skall hanteras och cascade anger hur NH skall nå objekten.
Om du har ett konkret problem så skicka ett im till mig så får du min msn där å så kan vi ta det där.
/patrikSv:nHibernate inverse = true ?
Sv: nHibernate inverse = true ?
Du kommer då att köra en sqlsats mer än vad som behövs. Ur ett objektperspektive så äger båda relationen, men titta på det som skapas i databasen, då ser du att HJUL har en FK till PK'n i BIL klassen.
Du lägger till ett hjul till och ändrar färgen.
Inverse=true
1. NH kommer att spara ner bilen och dess färg.
2. NH sparar ner det nya hjulet och samtidigt så skapar NH relationer.
Inverse=false
1. NH kommer att spara ner bilen och dess färg.
2. NH sparar ner det nya hjulet och sätter skapar relationer.
3. NH uppdaterar relationen mellan hjulet och bilen.
Om du måste spara bilen och sedan spara hjulet? Detta skall inte behövas. Kontrollera vad du har satt för cascade nivå på HJUL collectionen, testa att sätta ALL. Kontrollera också att du verkligen sätter relationerna rätt för objekten. dvs när du lägger till ett hjul för en bil så.
myCar.Wheels.Add( spareWheel);
spareWheel.Car = myCar;
Inverse anger hur relationer skall hanteras och cascade anger hur NH skall nå objekten.
Om du har ett konkret problem så skicka ett im till mig så får du min msn där å så kan vi ta det där.
Jag satt ihop ett litet exempel som gör precis det dom du säger.
Car myCar = new Car();
myCar.Color = "Grön";
Wheel w = new Wheel();
myCar.Wheels.Add(w);
session.Save(myCar);
session.Flush();
session.Close();
Inverse=false;
NHibernate: INSERT INTO Wheels (car_id) VALUES (@p0); select SCOPE_IDENTITY(); @p0 = '1'
NHibernate: UPDATE Wheels SET car_id = @p0 WHERE wheel_id = @p1; @p0 = '1', @p1 = '5'
Inverse= true
NHibernate: INSERT INTO Wheels (car_id) VALUES (@p0); select SCOPE_IDENTITY(); @p0 = '1'
/patrik