Я работаю с одноуровневыми , однопользовательскими приложениями, с FluentNHibernate .С несколькими потоками, запускаемыми по временным триггерам и по входящим сообщениям сокетов.
Какие требования будут определять, могу ли я создавать / распоряжаться ISession внутри каждого метода репозиториев или мне нужноподдерживать жизненный цикл ISession в течение нескольких вызовов, возможно, от начала и до конца программы?
Например, lazy-load требует, чтобы сеанс поддерживался?И если я не использую lazyload, по какой другой причине я должен поддерживать ISession?
В настоящее время мои методы хранилища выглядят так, как показано ниже, но мне интересно, если я делаю это неправильно ..
public class ProductRepository
{
public void Delete(Product product)
{
using (ISession session = FNH_Manager.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Delete(product);
transaction.Commit();
}
}
}
class FNH_Manager
{
private static Configuration cfg;
private static ISessionFactory sessionFactory;
public static void ConfigureSessionFactory()
{
sessionFactory = CreateSessionFactory();
}
public static ISession OpenSession()
{
return sessionFactory.OpenSession();
}
EDIT1: Попытка обработать "сеанс за вызов":
public class EmployeeRepository
{
public static void Delete(Employee employee)
{
using (ISession session = FNH_Manager.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
if (Employee.Id != 0)
{
var emp = session.Get(typeof(Employee), employee.Id);
if (emp != null)
{
session.Delete(emp);
transaction.Commit();
}
}
}
}
}