我在自己的IDataContext中包裝了NHibernate會話。我的NHibernate實現的,這是如下:使用ISession包裝的IStatelessSession
public class NHibernateDataContext : IDataContext {
private readonly ISession _session;
public NHibernateDataContext(ISession session) {
_session = session;
Begin();
}
public IRepository<T> Repository<T>() where T : class {
return new NHibernateRepository<T>(_session);
}
public void Begin() {
if (!_session.Transaction.IsActive)
_session.BeginTransaction();
}
public void Commit() {
if (_session.Transaction.IsActive)
_session.Transaction.Commit();
}
public void Dispose() {
_session.Close();
}
}
public class NHibernateRepository<T> : IRepository<T> where T : class {
private readonly ISession _session;
public NHibernateRepository(ISession session) {
_session = session;
}
public IQueryable<T> GetAll() {
return _session.Query<T>();
}
public T GetByID(int id) {
return _session.Get<T>(id);
}
public void Insert(T entity) {
_session.SaveOrUpdate(entity);
}
public void Delete(T entity) {
_session.Delete(entity);
}
}
使用微軟統一然後我說註冊此:
// Configure the container
container.RegisterType<ISessionFactory>(new ContainerControlledLifetimeManager(), new InjectionFactory(c => {
return CreateSessionFactory();
}));
container.RegisterType<ISession>(new InjectionFactory(c => {
var sessionFactory = container.Resolve<ISessionFactory>();
return sessionFactory.OpenSession();
}));
container.RegisterType<IDataContext, NHibernateDataContext>(new PerRequestLifetimeManager<IDataContext>());
到目前爲止好,但我的應用程序需要產生一些大的報告。我發現它們由於第一級緩存膨脹而呈指數級下降。我瞭解IStatelessSession界面允許我這樣做。
如何重構我的應用程序,以便在查詢某些數據時可以輕鬆使用IStatelessSession而不是ISession?請注意,對於每個請求,我仍然希望打開一個ISession,但只有在需要ISessionlessSession時纔會打開。
我會很感激的幫助。由於