我新接触NHibernate
,正试图在ASP.NET MVC 3应用程序中实现通用仓储模式和工作单元。我谷歌了这个主题并找到了一些链接,但它们对我来说都过于复杂。我使用StructureMap作为我的IOC。你能推荐给我一些链接或博客文章吗?
我新接触NHibernate
,正试图在ASP.NET MVC 3应用程序中实现通用仓储模式和工作单元。我谷歌了这个主题并找到了一些链接,但它们对我来说都过于复杂。我使用StructureMap作为我的IOC。你能推荐给我一些链接或博客文章吗?
以下是需要阅读的内容:
我在最近的项目中使用的实现看起来像:
public interface IRepository<T>
{
IEnumerable<T> GetAll();
T GetByID(int id);
T GetByID(Guid key);
void Save(T entity);
void Delete(T entity);
}
public class Repository<T> : IRepository<T>
{
protected readonly ISession Session;
public Repository(ISession session)
{
Session = session;
}
public IEnumerable<T> GetAll()
{
return Session.Query<T>();
}
public T GetByID(int id)
{
return Session.Get<T>(id);
}
public T GetByID(Guid key)
{
return Session.Get<T>(key);
}
public void Save(T entity)
{
Session.Save(entity);
Session.Flush();
}
public void Delete(T entity)
{
Session.Delete(entity);
Session.Flush();
}
}
ISession
对象呢?我的构造函数是public Repository(ISession session)
,但似乎只能通过OpenSession
方法来创建ISession
对象;例如,如何通过StructureMap使用这个仓储?能否再详细解释一下? - amiry jd看看这个解决方案 - https://bitbucket.org/cedricy/cygnus/overview
这是一个简单的仓储模式实现,我们在生产 MVC 1、2 和 3 应用程序中使用过。
当然,自那时以来,我们已经学到了直接针对 ISession 运行查询的好处。这样可以更好地控制它们。而且Ayende 告诉我们不要这样做。
谢谢 Cedric!