У меня возникла проблема с моим проектом. Я использую общий репозиторий со структурной картой вместе с Fluent NHibernate. Все работает неплохо, но когда дело доходит до транзакций и управления сеансами, я понятия не имею, что делать. Я искал ответы, но не могу найти ничего, что соответствовало бы моим потребностям.
Что я делаю в своем приложении, так это то, что я разрешаю структурной карте создавать экземпляр класса репозитория, когда он получает запрос на него, например:
internal class RepositoryRegistry : Registry
{
public RepositoryRegistry()
{
For<IRepository<User>>().Use<Repository<User>>();
For<IRepository<Tasks>>().Use<Repository<Tasks>>();
}
}
internal class NHibernateRegistry : Registry
{
public NHibernateRegistry()
{
For<ISessionFactory>()
.Singleton()
.Use(() => new NHibernateSessionFactory().GetSessionFactory());
For<ISession>()
.Singleton()
.Use(x => x.GetInstance<ISessionFactory>().OpenSession());
}
}
public interface IRepository<T>
{
T GetById(int id);
void SaveOrUpdate(T entity);
IList<T> GetAll();
IQueryable<T> Linq();
void Add(T entity);
}
Изменить: я пришел к выводу, что мне нужно. Я не хочу использовать шаблон единицы работы вместе со структурной картой, но я также хочу иметь какую-то оболочку репозитория, к которой можно получить доступ через единицу работы.
Спасибо, Джеймс Форд