Jag använder Nhibernate och har ett mappningsproblem. Det är så att jag skulle vilja spara två tillstånd för ett objekt. Med tanke på objekten ska ha samma ID så var min tanke att lägga till en property (tinyint 0,1) som anger vilket tillstånd objektet är i. Min mappning blev således såhär: hmm. jag tror inte det riktigt fungerar som id? Jag hade då tänkt mig att nyckeln skulle vara (ID, state). Typ (25, 0) och (25, 1). I detta fallet antar jag att ID är en position och state är en position. Instämmer med Niclas, att använda meningsfulla id:n är sällan en bra ide. Eller för att citera den store Martin Fowler: "... As a result, meaningful keys should be distrusted. ..." Ja speciellt när id:n kan bytas ut. Ja, jag har funderat om lite och kommit fram till att det troligen är bäst att göra som ni föreslår. Jag har dock två förslag här. Vilket anser ni bäst?Nhibernate, composite-key eller one-to-two?
<composite-id>
<key-many-to-one name="Parent" column="ParentID" class="Objects.Parent" />
<key-property name="IsPublic" column="IsPublic" type="Boolean" length="1" />
</composite-id>
Dessa två element tillhör alltså en förälder av klassen Parent. Denna mappning vill dock inte fungera (jag tycker mig ha provat det mesta) men dessutom så kommer den att ge mig en lista i klassen Parent, typ List<Element> som alltid kommer att innehålla två posten, vilket känns lite knasigt. Så det är kanske dumt från början.
Min nuvarande tanke är alltså att jag sparar båda posterna i samma databastabell. Vore det vettigare att spara dem i olika tabeller? I så fall så antar jag att jag måste mappa en objekt-typ till olika databastabeller, hur gör man isf det?
Hoppas att det inte är för rörigt.
Sv: Nhibernate, composite-key eller one-to-two?
Varför inte inte bara ha det som 2 properties?
Eftersom objekten kan ändra tillstånd? Ett id får aldrig ändras?Sv:Nhibernate, composite-key eller one-to-two?
Jag ser gärna att ID är detsamma för båda objekten då tanken är att man kommer att förändra det ena för att sedan "spara" det och då ändrar det tillstånd. I det fallet så blir det lite krångligare om ID:t förändras bara för att man sparar.Sv: Nhibernate, composite-key eller one-to-two?
Ett id är något som aldrig får ändras eller finnas dublett av jag föreslår iallfall om det är så jag har fattat det att du har ett ID för positionerna. Antar att positionerna ändå måste kopplas mot något mer? vilket det säkert gör av mappningen?
ID, X, Y så hade jag gjort där x och y är vanliga propertiesSv:Nhibernate, composite-key eller one-to-two?
"The NHibernate FAQ" har en bra post om id-hantering:
http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/04/identity-field-equality-and-hash-code.aspxSv: Nhibernate, composite-key eller one-to-two?
positionerna kan bytas ut vad jag fattade det som.Sv:Nhibernate, composite-key eller one-to-two?
1. Parent-tabellen ha två poster columner som anger ElementID eller för varje state. Alltså
[PublicElement][NotPublicElement] detta kopplas då till ElementID ut Element-tabellen.
2. Element-tabellen har ID (autoincrement eller whatever) + ParentID (kopplingen) + State (Public, NotPublic [1,0]).
Anser kanske själv att alternativ två är bättre och lite mer utbyggbart.