這可能不那麼容易,但這是我的要求。創建基本上包裝會話和事務的工作單元,並在請求結束時存儲該請求並提交或回滾。然後
public interface IUnitOfWork : IDisposable
{
ISession Session { get; }
void Commit();
void Rollback();
}
實現可能看起來像:
public class UnitOfWork : IUnitOfWork
{
private readonly ITransaction _tx;
public ISessionFactory SessionFactory { get; set; }
public UnitOfWork()
{
SessionFactory = ObjectFactory.GetNamedInstance<ISessionFactory>(Keys.SessionFactoryName);
Session = SessionFactory.OpenSession();
_tx = Session.BeginTransaction();
}
public UnitOfWork(ISessionFactory sessionFactory)
{
SessionFactory = sessionFactory;
Session = SessionFactory.OpenSession();
_tx = Session.BeginTransaction();
}
public ISession Session { get; private set; }
public void Commit()
{
if (_tx.IsActive)
_tx.Commit();
}
public void Rollback()
{
_tx.Rollback();
}
}
在endrequest就處置工作的單位。
第二個鏈接看起來很有趣。我會盡快給您回覆。非常感謝。 – jhovgaard
爲韋斯頓的博客+1。 – mxmissile
http://trason.net/journal/2009/10/14/nhibernate-transactional-boundaries.html是一個了不起的帖子! :) – jhovgaard