我正在研究UoW模式,并有3个问题。
public class UnitofWork : unitofwork.Models.IUnitofWork
{
private readonly ITransaction transaction;
private readonly ISession session;
public UnitofWork(ISession session)
{
this.session = session;
session.FlushMode = FlushMode.Auto;
transaction = session.BeginTransaction(IsolationLevel.ReadCommitted);
}
public void Commit()
{
if (!transaction.IsActive)
{
throw new InvalidOperationException("Oops! We don't have an active transaction");
}
transaction.Commit();
}
public void Rollback()
{
if (transaction.IsActive)
{
transaction.Rollback();
}
}
public void Dispose()
{
if (session.IsOpen)
{
session.Close();
}
}
}
我刚学习“隔离级别”,我想知道你应该使用哪一个?如果您需要为不同的交易使用多个“IsolationLevels”,会发生什么?您将如何配置您的UoW(您是否会对上述类进行多次实现?)
其他然后回滚和提交通常会进入UoW?我知道诸如创建,更新,获取查询等内容会进入存储库(如果您使用此模式)那么您还可以在其中看到什么?
我从某个网站复制了这个UoW(现在没有手头),并根据我的需要进行了更改(例如我使用的是ninject,所以我觉得UoW服用没有意义在sessionFactory中并在UoW中打开一个会话
我想知道什么是Dispose?我以前见过几次(有些似乎实现了IDispose)。
我现在在任何代码中都没有使用它。我想知道是否有必要,因为我提到我正在使用ninject并处理会话(即我完成后关闭它)
public void Dispose()
{
if (session.IsOpen)
{
session.Close();
}
}
修改
我将此添加到我的工作单元
public void BeginTransaction()
{
transaction = session.BeginTransaction(IsolationLevel.ReadCommitted);
}
public void BeginTransaction(IsolationLevel level)
{
transaction = session.BeginTransaction(level);
}
我从构造函数
中删除了它答案 0 :(得分:3)
ISession本身是一个工作单元实现,因此实现自己的完全是可选的。
using
块中使用或手动处理。这意味着该类具有需要运行的清理操作,例如关闭ISession。在这里,Dispose方法应该只调用ISession.Dispose而不是只关闭会话。