【发布时间】:2016-06-27 19:32:56
【问题描述】:
我在我的 aspx 页面中使用 ninject.web in this way
我的问题在于 Nhibernate 会话管理。
这是我的 ninject 模块:
public override void Load()
{
Bind<IUnitOfWork>().To<UnitOfWork>();
Bind<IAttivitaRepository>().To<AttivitaRepository>();
}
page_load 和单个页面中的每个按钮都以这种方式创建和处理一个工作单元:
using (iuow)
{
iuow.DoSomething();
iuow.SaveAll();
}
在 pageLoad 中有效,但页面中的所有其他尝试将 iuow 与新的 Using 块一起使用,返回该会话已关闭
这是我的 UoW 实现:
public UnitOfWork()
{
_nhHelper = new SessionFactory();
InizializzaSessione();
_transaction = _session.BeginTransaction();
}
private void InizializzaSessione()
{
if (_session == null)
{
_session = _nhHelper.OpenSession();
}
Area = new AreaRepository(this._session);
Attivita = new AttivitaRepository(this._session);
Societa = new SocietaRepository(this._session);
Persona = new PersonaRepository(this._session);
}
/// <summary>
/// Salva le modifiche sulla base dati
/// </summary>
public void SaveAll()
{
if (_transaction != null)
{
_transaction.Commit();
_transaction = null;
}
}
在我看来,iuow 仅在页面加载时才被解决(通过调用 New),因此每次创建 Uow 的新尝试都返回上次使用的会话已处理。
在尝试使用 ninject 之前,我所做的只是:
using (Iuow = new UnitOfWork())
{
....
}
一切正常
附言
我必须从绑定中删除InRequestScope,因为它甚至会阻止页面加载工作
【问题讨论】:
-
我从未使用过ninject,但肯定是using语句正在关闭会话,删除它并在完成后关闭会话。
-
我希望新的 using 块创建一个新的 UnitOfWork,而不是重用现有的一个
标签: c# asp.net session nhibernate ninject