我是新来NHibernate
,我努力工作教学贯彻的通用Repository模式和单位使用在ASP.NET MVC 3应用。我搜索了标题并发现了新的链接;但所有这些对我来说都是比较复杂的。我使用StructureMap作为我的IOC。你能给我建议一些链接或博客吗?如何实现通用仓库模式和UOW NHibernate的3.2
回答
这里有几个项目的读通:
- Advantage of creating a generic repository vs. specific repository for each object?
- How to make a Generic Repository?
实现我在最近的项目都使用看起来像:
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'对象? '公共库(ISession会话)',但似乎'ISession'只能通过'OpenSession'方法创建;例如,如何通过StructureMap使用这个存储库?能多解释一下吗? – 2012-03-04 19:15:06
@ king.net我自己在结构图上使用ninject,但是类似的概念也适用。在ninject中,我会做这样的事情:绑定
感谢帮助完整的答案,接受它;问候 – 2012-03-05 03:29:49
查看此解决方案 - https://bitbucket.org/cedricy/cygnus/overview
它是我们在生产MVC 1,2和3应用程序中使用的存储库模式的简单实现。
当然,我们从那以后就知道我们非常感谢让我们的查询直接运行在ISession上。你有更多的控制他们的方式。那和Ayende告诉我们不要。
谢谢塞德里克!
谢谢。答案投了。问候 – 2012-03-05 18:57:27
- 1. NHibernate的仓库模式
- 2. 存储库模式,UoW模式,纯NHibernate会话
- 3. EF仓库与UoW更新
- 4. MVC存储库模式和UOW
- 5. nHibernate [TransactionAttribute]为UoW冲突与存储库模式
- 6. EF,UoW和仓库 - 何时在WebForms中处理UnitOfWork?
- 7. 如何实现会话每会话模式,用的WebAPI/NHibernate的
- 8. 使用NHibernate和Spring.Net实现存储库
- 9. 存储库模式的通用接口继承和类实现
- 10. FluentNhibernate和NHibernate 3.2
- 11. 不EF6的DbContext与UOW和存储库模式的默认
- 12. 如何实现多个数据库的存储库模式
- 13. 在现有代码库中实现模拟仓库
- 14. 实现通用存储库和工作模式单元
- 15. 设计模式:抽象工厂和通用仓库
- 16. 我实现NHibernate存储库模式的问题
- 17. 数据仓库的实际实现
- 18. 如何使用Slick 3.1和DDD实现多数据库模式
- 19. C中的仓库模式#
- 20. 实体框架的通用仓库
- 21. 通用仓库
- 22. 存储库和UoW模式与服务层
- 23. 模拟仓库与真实仓库/模拟数据
- 24. PHP设计模式工厂,仓库和...?
- 25. 实现通用存储库模式 - 实体密钥类型
- 26. 实体框架中的UOW和存储库asp.net应用程序
- 27. NHibernate和状态模式持久性 - 一个很好的实现?
- 28. 仓库模式聚合和聚合根与实体框架4.0
- 29. 流利的NHibernate和存储库模式
- 30. 如何在NHibernate中实现开放会话视图模式?
NHibernate的ISession已经代表了一个工作单元和对存储库的访问。 – 2012-03-04 16:59:11
存储库应该封装数据访问层,即它将使用但不会公开Nhibernate。和一个适当的设计的存储库(为您的需要,一个通用的存储库是无用的)不应该需要工作单位 – MikeSW 2012-03-04 19:09:21