Я не могу понять, почему я закрываю сеанс при вызове второго запроса в моем классе.
Сначала я вызываю метод, getPoliceData() работает нормально. После этого я вызываю GetSkadeData(), и он выдает ошибку:
класс DbFactory выглядит так
class DbFactory
{
private static Lazy<ISessionFactory> factory = new Lazy<ISessionFactory>(GetSessionFactory, System.Threading.LazyThreadSafetyMode.ExecutionAndPublication);
public DbFactory()
{
}
public List<PoliceData> getPoliceData() {
using (ISession session = OpenSession())
{
IList<PoliceData> pols = session.Query<PoliceData>().Where(p => p.policyNumber == 053126703).ToList();
return pols.ToList();
}
}
public List<SkadeData> getSkadeData()
{
using (ISession session = OpenSession())
{
IList<SkadeData> skader = session.Query<SkadeData>().Where(p => p.Postnr == "7700").ToList();
return skader.ToList();
}
}
private static ISession OpenSession()
{
return factory.Value.GetCurrentSession();
}
private static ISessionFactory GetSessionFactory()
{
//NHibernate.Cfg.Configuration
var c = new Configuration();
//c.Configure();
c.DataBaseIntegration(db =>
{
db.ConnectionString = "Server=\"localhost\";database=testdb;Integrated Security=SSPI";
db.Dialect<NHibernate.Dialect.MsSql2012Dialect>();
});
//c.Configure("c:\XML.xml");
ModelMapper maps = new ModelMapper();
maps.AddMapping<PoliceDataMap>();
maps.AddMapping<SkadeDataMap>();
c.AddMapping(maps.CompileMappingForAllExplicitlyAddedEntities());
c.CurrentSessionContext<NHibernate.Context.ThreadLocalSessionContext>();
//c.Configure().Configure();
var sessionFac = c.BuildSessionFactory();
return sessionFac;
//return sessionFac.GetCurrentSession();
}
}
Когда я вызываю метод из другого класса, я делаю это
List<PoliceData> test = new List<PoliceData>();
List<SkadeData> skader = new List<SkadeData>();
DbFactory poli = new DbFactory();
test = poli.getPoliceData();
skader = poli.getSkadeData();
Нужно ли мне создавать новый экземпляр dbfactory или можно использовать один и тот же сеанс для двух разных запросов. Было бы неплохо, если бы Nhibernate был настроен только один раз, и после этого вы просто открывали и закрывали сеанс, когда это необходимо.