Pytanie następujące po Fluent NHibernate + multiple databases (nie trzeba stosować się do tego linku, tutaj powinno być wystarczająco dużo tła).Jak zidentyfikować fabrykę sesji konkretnej jednostki z płynnymi NHibernate i wieloma bazami danych
Mój problem jest taki:
Używam Fluent NHibernate. Moja aplikacja korzysta z wielu baz danych. Każda baza danych ma swoje własne jednostki zarejestrowane (odwzorowane) przeciwko niemu. W rezultacie mamy wiele fabryk sesji, z których każda odnosi się do pojedynczej bazy danych, a każda z nich zawiera własny zestaw mapowanych elementów.
Dla podmiotów ładujących stworzyłem ogólną klasę Factory, która zapewnia pewne standardowe metody ładowania, które można zastosować dla dowolnego zarejestrowanego podmiotu (w dowolnej bazie danych). Problem polega na tym, że metody ładowania muszą używać poprawnej fabryki sesji dla klasy jednostek, z którymi jestem zajęty. Jak ustalić, z której fabryki sesji muszę korzystać? Mam wszystkie fabryki sesji "pod ręką" (i indeksowane według nazwy bazy danych), po prostu potrzebuję sposobu, wiedząc, jaki typ Jednostki chcę załadować, wybierając odpowiednią Sesjonowaną Fabrykę do użycia.
Na przykład:
public IBaseBusinessObject CreatePopulatedInstance(Type boType, Guid instanceKey)
{
IBaseBusinessObject result = null;
ISessionFactory sessionFactory = GetSessionFactory(boType);
using (ISession session = sessionFactory.OpenSession())
{
using (session.BeginTransaction())
{
result = (IBaseBusinessObject)session.Get(boType, instanceKey);
}
}
return result;
}
Co musi iść w GetSessionFactory (boType)?
Dzięki za przeczytanie!
Wielkie dzięki. To rozwiązanie działało. – Trevor
Metoda GetClassMetadata() zwraca wartość null, jeśli określony typ nie jest zarządzany przez odpowiednią fabrykę sesji. – Trevor
Nie ma za co. –