我是第一次使用 DDD,所以我是初学者!所以,让我们认为它非常简单:D 我使用 asp.net mvc 2、ddd 和 nhibernate 开发了一个应用程序。我在一个类库中有一个域模型,在另一个类库中有一个存储库,还有一个 asp.net mvc 2 应用程序。我的 Repository 基类,我有一个注入和依赖的构造(我的唯一 ISessionFactory 对象在 global.asax 中启动),代码是:
public class Repository<T> : IRepository<T>
where T : Entidade
{
protected ISessionFactory SessionFactory { get; private set; }
protected ISession Session
{
get { return SessionFactory.GetCurrentSession(); }
}
protected Repository(ISessionFactory sessionFactory)
{
SessionFactory = sessionFactory;
}
public void Save(T entity)
{
Session.SaveOrUpdate(entity);
}
public void Delete(T entity)
{
Session.Delete(entity);
}
public T Get(long key)
{
return Session.Get<T>(key);
}
public IList<T> FindAll()
{
return Session.CreateCriteria(typeof(T)).SetCacheable(true).List<T>();
}
}
在我拥有特定的存储库之后,如下所示:
public class DocumentRepository : Repository<Domain.Document>, IDocumentRepository
{
// constructor
public DocumentRepository (ISessionFactory sessionFactory) : base(sessionFactory)
{ }
public IList<Domain.Document> GetByType(int idType)
{
var result = Session.CreateQuery("from Document d where d.Type.Id = :IdType")
.SetParameter("IdType", idType)
.List<Domain.Document>();
return result;
}
}
此代码中没有对事务的控制,并且工作正常,但是,我想在我的 asp.net mvc 控制器中制作一些东西来控制这个存储库,一些简单的东西,如下所示:
using (var tx = /* what can I put here ? */) {
try
{
_repositoryA.Save(objA);
_repositoryB.Save(objB);
_repositotyC.Delete(objC);
/* ... others tasks ... */
tx.Commit();
}
catch
{
tx.RollBack();
}
}
我听说过 NHibernateUnitOfWork,但我不知道 :(,如何配置 NHibernateUnitOfWork 以使用我的存储库?我应该更改我的简单存储库吗?欢迎提出建议!
所以,谢谢有人读到这里!如果能帮到我,不胜感激!
PS:对不起我的英语!
再见 =D