我正在使用实体框架4.1和mvc3构建网站。我正在使用通用存储库模式:
http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle。我用ninject
将我的混凝土储存库注入控制器。 我的问题是,我的每个dbcontext都不同,我不能在没有代码的情况下运行复杂的查询,例如“不同的上下文无法在相同的查询中使用”。我尝试使用“单例”方法,但随后代码喊道“试图输入一个处置对象(空引用异常)”。 有没有人有我做错了什么想法?使用通用存储库模式管理连接
1
A
回答
1
的Singleton模式是一种抗应该避免的模式。它导致很难测试具有各种副作用的代码(例如,处置DbContext)。
UnitOfWork管理不同存储库上的操作。它将跟踪所做的所有更改,然后将这些更改以正确的顺序写入数据库。 DbContext已经实现了UnitOfWork模式(尽管将DbContext隐藏在自定义的UnitOfWork接口后面更好)。
如果你已经在使用依赖注入槽NInject,你几乎是他们的!你应该改变你的版本库的构造采取的DbContext:
public class MyRepository
{
private _unitOfWork;
public MyRepository(DbContext unitOfWork)
{
_unitOfWork = unitOfWork;
}
....
}
如果然后用InRequestScope mode就可以工作了接线的DbContext到NInject。您的DbContext将由所有存储库共享,Ninject将在请求结束时处理它。
0
不知道我是否收到您的问题,但您的存储库应该能够在“工作单元”内工作,该工作单元将具有单个dbcontext。
我觉得开始工作的这个单元的最佳位置是在开始请求时,您可以在您的Global.asax设置(和推倒结束请求)
+0
“工作单元”是我还没有尝试过的东西。你能告诉我为什么当试图使用“single Ton”模式时,我得到了一个空引用(试图访问一个处置对象) –
相关问题
- 1. 通用存储库模式
- 2. 通用连接池内存管理
- 3. 如何使用通用存储库模式连接 - 实体框架
- 4. 使用存储库模式
- 5. DAL使用dapper的存储库模式连接
- 6. 使用存储库模式使用ThenIclude
- 7. 使用通用接口存储库
- 8. 使用SVN连接到git存储库
- 9. git存储库中的依赖管理(使用子模块)
- 10. 如何使用magento连接外部库存管理程序
- 11. 存储库模式的通用接口继承和类实现
- 12. 使用旧ado.net实现通用存储库模式
- 13. 使用通用存储库设计模式编译Linq
- 14. EF4:如何使用通用存储库模式?
- 15. 在通用存储库模式中使用ApplicationUser
- 16. 使用C#通过其URL连接到Git存储库
- 17. 使用存储凭据通过dplyr连接到MySQL数据库
- 18. 如何使用存储库模式
- 19. 使用存储库模式与ORM
- 20. 使用ORM替换存储库模式?
- 21. 使用LINQ2SQL(存储库模式)的SqlCacheDependency
- 22. Laravel - 使用存储库模式
- 23. 使用EF7的存储库模式
- 24. 使用存储库模式的帮助?
- 25. 使用PetaPoco实现存储库模式
- 26. 使用PowerShell的存储库模式
- 27. 使用RxJava实现存储库模式
- 28. 使用单独的模式/数据库方法管理多租户连接池
- 29. 用jdbc管理连接数据库jsf
- 30. 通过VS2010连接到SVN存储库
你的意思是我的仓库的构造函数应该得到一个dbContext,ninject会知道自动注入dbcontext在控制器中调用存储库类时? –
加上,我正在使用本文中看到的通用存储库:http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle如何我可以在那里使用存储库构造器吗? –
是的。我的意思是你的Repository上的构造函数应该接受一个dbContext。如果你然后使用NInject注入一个带有InRequestScope的dbContext(这意味着每个请求将有一个共享的dbContext),那么它应该工作。据我所见,GenericRepository应该被修改为在其构造函数中使用dbContext,而不是为每个存储库创建一个。 –