我是新来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. MVC存储库模式和UOW
- 4. nHibernate [TransactionAttribute]为UoW冲突与存储库模式
- 5. 存储库模式的通用接口继承和类实现
- 6. 使用NHibernate和Spring.Net实现存储库
- 7. FluentNhibernate和NHibernate 3.2
- 8. 在现有代码库中实现模拟仓库
- 9. 实现通用存储库和工作模式单元
- 10. 数据仓库的实际实现
- 11. 如何使用Slick 3.1和DDD实现多数据库模式
- 12. C中的仓库模式#
- 13. 通用仓库
- 14. 模拟仓库与真实仓库/模拟数据
- 15. PHP设计模式工厂,仓库和...?
- 16. 实现通用存储库模式 - 实体密钥类型
- 17. 仓库模式聚合和聚合根与实体框架4.0
- 18. NHibernate和状态模式持久性 - 一个很好的实现?
- 19. EF仓库模式与ChangeTracker
- 20. 流利的NHibernate和存储库模式
- 21. 如何在NHibernate中实现开放会话视图模式?
- 22. 无法从存储库转换为IRepository UOW存储库模式
- 23. 如何以通用形式实现NULL对象设计模式?
- 24. 实现覆盖在我的仓库
- 25. nhibernate 3.2如何关闭show_sql
- 26. 通用类型仓库模式的Autofac XML/JSON配置
- 27. 通用仓库模式与关系表中的工作单元
- 28. 单元工作模式和统一和通用存储库实现
- 29. 与NHibernate的库模式?
- 30. 没有界面的仓库模式
NHibernate的ISession已经代表了一个工作单元和对存储库的访问。 – 2012-03-04 16:59:11
存储库应该封装数据访问层,即它将使用但不会公开Nhibernate。和一个适当的设计的存储库(为您的需要,一个通用的存储库是无用的)不应该需要工作单位 – MikeSW 2012-03-04 19:09:21