Hallo, bin ganz neu hier und hoffe das mir einer bei meinem Mapping-Problem helfen kann.
Arbeite auf SQL 2008 Express mit NHibernate.
Erklaerung des Aufbaus (kann uebersprungen werden)
Ich hab erstmal folgende Tabellen-Struktur (siehe Tabellen.png).
Die Typen sind nicht relevant da die in meinem SQL-Statements die entsprechenden DatenTypen bekommen.
Es gibt verschiedene Standorte (Locations). Ein Standort kann N beliebige Raeume (Rooms) haben. Jeder Besucher (Customer) wird in genau einem Raum untergebracht. Jeder Raum kann N-viele Besucher haben.
JEder Besucher verursacht N-viele Kosten (die werden in Payments getracked).
Dann ist mir folgendes Szenario eingefallen:
(In der Tabelle Costs sind vordefinierte Kosten wie z.B. Internet Nutzung, Woechentliche Miete etc.)
Es kann sein das man einer Person fuer etwas chargen will was nicht in der Kosten-Tabelle ist, was da aber auch nicht rein soll z.B. Transport kosten.
Ich dachte ich kann das irgendwie in Payments mit reinnehmen, aber dann dachte ich mir, dass es Probleme gibt mit dem FK von der Cost tabelle, deswegen hab ich jetzt eine neue Tabelle gemacht (Extra Payments).
Verbesserungs Vorschlag?
Fragen bzw Probleme:
Ist vielleicht alles ein wenig viel verlang, aber auch wenn's nur gute (da ich mich shcon vergeblich mit rumgeschlagen habe) links zu (vorzugsweise deutsch) tutorials sind, wuerde mir helfen oder erklaerungen was ich falsch mache und was man anders machen kann etc.
EDIT:
Bilder wurden gescaled beim Upload und sind nicht mehr lesbar.
Hab die nochmal neu hochgeladen auf nem Pic-Hoster:
Arbeite auf SQL 2008 Express mit NHibernate.
Erklaerung des Aufbaus (kann uebersprungen werden)
Ich hab erstmal folgende Tabellen-Struktur (siehe Tabellen.png).
Die Typen sind nicht relevant da die in meinem SQL-Statements die entsprechenden DatenTypen bekommen.
Es gibt verschiedene Standorte (Locations). Ein Standort kann N beliebige Raeume (Rooms) haben. Jeder Besucher (Customer) wird in genau einem Raum untergebracht. Jeder Raum kann N-viele Besucher haben.
JEder Besucher verursacht N-viele Kosten (die werden in Payments getracked).
Dann ist mir folgendes Szenario eingefallen:
(In der Tabelle Costs sind vordefinierte Kosten wie z.B. Internet Nutzung, Woechentliche Miete etc.)
Es kann sein das man einer Person fuer etwas chargen will was nicht in der Kosten-Tabelle ist, was da aber auch nicht rein soll z.B. Transport kosten.
Ich dachte ich kann das irgendwie in Payments mit reinnehmen, aber dann dachte ich mir, dass es Probleme gibt mit dem FK von der Cost tabelle, deswegen hab ich jetzt eine neue Tabelle gemacht (Extra Payments).
Verbesserungs Vorschlag?
Fragen bzw Probleme:
- Da ich in jeder Tbl eine Updated_ID habe die eigentlich aus der Customer Tbl kommt, kann ich diese doch bestimmt so Mappen dass ich in meinem Programm an der stelle nicht nur die ID bekomme sondern direkt das entsprechende Objekt der Personen-Klasse?! Und beim Abspeichern genau so, das ich einfach in der Klasse A an der PRoperty idUpdated ein Objekt der Klasse B sitzen habe. Mit Nhibernate Klasse A abspeiche und Nhibernate in die DB die ID von A.Property.idPerson in die Tbl schreibt?!
- Ich benutze NHibernate zum aller ersten mal und habe 0 Erfahrungen und hab mich auch total durchgekaempft um es in meinem Projekt einzubinden.
Es waere super wenn mir jemand die Tabellen-Mappings optimieren koennte und mir natuerlich auch erklaert wieso warum was gemacht wurde bzw werden muss - damit ich auch einen Lern-Effekt erzielen kann. - Momentan benutze ich die Tbl-Struktur aus Model1.png und die in der ZIP-Datei enthaltenden Klassen bzw. Mappings (klappt auch soweit fast alles, mit paar umstaenden). Wenn ich jetzt eine Location in meinem Programm oeffne um diese zu bearbeiten, liste ich dort alle Rooms mit auf die dadran haengen. Wenn ich jetzt einen der Rooms bearbeite und die Form mit Speichern schliesse durchlaufe ich folgenden code:
Code:// falls irgendwas an der Location bearbeitet wurde wie z.b. namen geaendert Functions.SaveOrUpdateObject(NewLocation); //initialisiere liste var rooms = new List<Room>(); //durchlaufe alle eintraege in der DGV foreach (DataGridViewRow item in dataGridViewRooms.Rows) { //erstelle dummy var newRoom = new Room { IdRoom = -1, //-1 weil ein neuerstelltes objekt Updated = DateTime.Today, IdUpdated = StartForm.CurrentLogIn.IdPerson, IdLocation = NewLocation.IdLocation }; var value = item.Cells[Columns.ColumnDlgAddNewLocationIdRoom.ToString()].Value; if (value != null) { int outInt; if (int.TryParse(value.ToString(), out outInt)) { ToUpdate = outInt != -1; //haben wir gerade ein neuen raum in der hand oder einen der geupdated werden soll newRoom.IdRoom = outInt; } } value = item.Cells[Columns.ColumnDlgAddNewLocationBedMax.ToString()].Value; if (value != null) { int outInt; if (int.TryParse(value.ToString(), out outInt)) { newRoom.BedMax = outInt; } } value = item.Cells[Columns.ColumnDlgAddNewLocationComment.ToString()].Value; if (value != null) { newRoom.Comment = value.ToString(); } value = item.Cells[Columns.ColumnDlgAddNewLocationRoomNumber.ToString()].Value; if (value != null) { newRoom.RoomNumber = value.ToString(); } //fuellen der liste rooms.Add(newRoom); if (!ToUpdate) { Functions.SaveObject(newRoom); } else { Functions.SaveOrUpdateObject(newRoom); } }
jedenfalls bekomm ich so folgende eine Fehler-Meldung (Error.png)
Ist vielleicht alles ein wenig viel verlang, aber auch wenn's nur gute (da ich mich shcon vergeblich mit rumgeschlagen habe) links zu (vorzugsweise deutsch) tutorials sind, wuerde mir helfen oder erklaerungen was ich falsch mache und was man anders machen kann etc.
EDIT:
Bilder wurden gescaled beim Upload und sind nicht mehr lesbar.
Hab die nochmal neu hochgeladen auf nem Pic-Hoster:
Comment