Also, ich muss meine Klasse zu Datenbanktabelle zuordnen, aber manchmal brauche ich faul laden zu sein, manchmal aus zu sein.Fließende NHibernate Karte 2 identische Klassen zu einer Tabelle, erste-faul auf, zweite-faul aus
Beispiel: Ich habe Duplikate dieser beiden unten beschriebenen Klassen erstellt, und ich kartiere sie mit FNH, aber mit lazy loading on im Original und off im Duplikat.
http://i.stack.imgur.com/goG30.png
Grundsätzlich möchte ich in der Lage sein, ein Team von DB zu erhalten, die alle Listen mit Teamkollegen hat geholt, aber die Mitglieder sollten nicht alle Teams und alles andere haben, einfach nur Informationen über ein Teammitglied. Auch wenn ich ein TeamMember von der DB bekomme, möchte ich, dass alle seine Teams nur einfache Infos enthalten.
"http://i.stack.imgur.com/7OkyD.png" -> sie erlauben es neuen Benutzern nicht, Bilder oder Links zu posten.
Also, wenn ich nur diese beiden Klassen habe, dann wenn eine Lazy Loading auf irgendeiner Seite eingeschaltet ist, ist eine der zuvor erläuterten Situationen nicht erfüllt. Wenn faul auf beiden Seiten ist, bekomme ich eine ganze Reihe von Daten, die ich nicht brauche oder nicht brauche.
Zuerst hatten Original und Duplikat gleiche Namen und waren in verschiedenen Paketen, aber ich bekam eine Ausnahme, dass Zuordnung nicht eindeutig war. Wenn es dafür einen Weg gibt, wäre das ideal. Gibt es eine Möglichkeit, dies zu tun?
Ich konnte keine Antwort finden, also änderte ich den Namen des Duplikats in NameOfOriginal + Lite. wurde Mapping analysiert, aber wenn ich ein Team aus der Datenbank erhalten wollte, erhalte ich eine Ausnahme:
{ "ORA-00904: \" SUPERVIZ _ \ TEAMMEMBERLITE_ID \ "\ "": ungültige Kennung \ n"}
Also, anscheinend FNH liest einen Klassennamen und Anzeigen eine "_ID" und verwendet das als ID für meine doppelte Klasse und das verursacht das Problem. Ich versuchte mit .ParentKeyColumn ("") .ChildKeyColumn ("") aber kein Erfolg.
Ich hoffe, ich habe Sie nicht zu verwechseln viel :)
[DataContract]
public class Team
{
[DataMember]
public virtual int Team_id { get; private set; }
[DataMember]
public virtual String Name { get; set; }
[DataMember]
public virtual String Description { get; set; }
[DataMember]
public virtual TeamMember Deputy { get; set; }
[DataMember]
public virtual TeamMember Leader { get; set; }
[DataMember]
public virtual IList<TeamMember> TeamMembers { get; set; }
[DataMember]
public virtual IList<TeamMember> Supervizors { get; set; }
...
}
[DataContract]
public class TeamMember
{
[DataMember]
public virtual int TeamMember_id { get; set; }
[DataMember]
public virtual String First_name { get; set; }
[DataMember]
public virtual String Last_name { get; set; }
[DataMember]
public virtual String Sid { get; set; }
[DataMember]
public virtual IList<Team> SupevisingTeams { get; set; }
[DataMember]
public virtual IList<Team> LeaderInTeams { get; set; }
[DataMember]
public virtual IList<Team> DeputyInTeams { get; set; }
[DataMember]
public virtual IList<Team> MemberInTeams { get; set; }
...
}
Ist das nicht einfacher zu deaktivieren/aktivieren faul Laden als Mapping? – Paco
Ich habe nie den Fall gesehen, wo Lazy = False tatsächlich benötigt wird. Warum erzählst du uns nicht über dein tatsächliches Problem, anstatt nach einem Hack für eine fehlerhafte Lösung zu fragen? (Ich will nicht hart klingen, es ist nur, dass ich * weiß * das ist eine schlechte Herangehensweise) –
Die Sache ist, dass die in Post gezeigten Klassen nur ein Teil meines Datenbankmodells sind. Ich habe schon in jedem Mapping ein langsames Laden, aber dann warte ich ungefähr 20 Sekunden um nur eine Entity zu bekommen! Das Warten wird mit der DB-Größe fortgesetzt. Es ist, weil ich nicht nur die Entitäten bekomme, die ich brauche, sondern stattdessen einen ganzen Objektbaum. Manchmal brauche ich alles, aber manchmal nicht, ich brauche nur ein paar Daten.Vielleicht kann das, was ich will, nicht getan werden. Ich arbeite an etwas, das wahrscheinlich helfen wird. Wenn es so ist, hinterlasse ich einen Kommentar. – Vladica