Announcement

Collapse
No announcement yet.

NHibernate Mapping-Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • NHibernate Mapping-Problem

    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:
    1. 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?!
    2. 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.
    3. 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);
                          }
                      }
      ich erstelle eine neue instanz der klasse, schaue nach ob in der DGV der raum bereits eine ID hat und weise die der klasse hinzu bzw alle neuen informationen und update dann und fuege dann der location klasse die neue liste hinzu (ich glaueb wnen ichs richtig mappe muesste ich nur die location klasse mit den raumen erstellen, eine saveorupdate auf location werden und nhibernate muesste alles in die DB hauen??)

      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:





    Attached Files
    Zuletzt editiert von tomek; 25.05.2010, 10:15.

  • #2
    Zu 1.

    Das ist Sinn von Hibernate, Objekte zurückzugeben und bei Verknüpfungen eben nicht die ID, sondern das Objekt -> LazyLoading.

    Zu 2.
    Kann die Grafiken leider nicht lesen

    Zu 3.
    Die Fehlermeldung kann ich nicht lesen
    Christian

    Comment


    • #3
      hm keinen plan warum das forum die bilder aufeinmal so klein gemacht hat ... hmpf... ich lade die bilder nochmal wo anders hoch...




      Comment

      Working...
      X