Wie würde ich nHibernate verwenden, konfiguriert durch fließende nhibernate, wenn es einen Unterschied macht, eine Entität mit natürlichen/alternativen Schlüssel in einigen Fällen, anstatt den Primärschlüssel bei Verwendung der Load
Methode laden auf einer ISession.nHibernate Proxy Load mit Natural Key
Ich brauche immer noch die Funktionalität, um mir beides zu ermöglichen, und in den meisten Fällen wird die Entity über den PKey geladen, aber in einigen Fällen (wo ein externes System involviert ist), muss ich das auswählen Aufzeichnung mit dem natürlichen Schlüssel.
Ich mag würde den Leistungsvorteil Load
erlaubt zu halten, anstatt zu tun, eine Abfrage usw.
// Current
int countryID = 1; // from normal input source
Address a = new Address();
a.Country = session.Load<Country>(countryID);
session.SaveOrUpdate(a);
// Required
string countryCode = "usa"; // from external input source
Address a2 = new Address();
a2.Country = session.LoadViaNatualKeySomehow<Country>(c=> c.Code, countryCode); // :)
session.SaveOrUpdate(a2);
ja, dein letzter Punkt macht Sinn. Also, meine Arbeit herum, ist es, eine Mapping-Datenstruktur des natürlichen Schlüssels -> pkey während der Bootstrap-Zeit zu laden und diese als eine Suche zu verwenden, um die Werte zu übersetzen. Angenommen beide Werte sind für die Lebensdauer der App unveränderbar, irgendwelche Probleme damit? – jasper
Normalerweise sollte das funktionieren. Sie können sie der Karte hinzufügen, wenn sie das erste Mal geladen werden. Sie können ein PostLoad-Ereignis verwenden, um Schlüssel einer geladenen Entität hinzuzufügen. Berücksichtigen Sie den Speicherverbrauch der Karte und die Thread-Sicherheit. –