在MVC / Entity Framework项目中,我正在远离Repository模式。
首先,它给了我一些问题...... 我认为DBContext和IDBset类实现了UnitOfWork和Repository。
所以我开始使用命令和查询。这是一个例子:
public class ListPostsQuery {
public ListPostsQuery() {
}
public List<Post> Execute(int currentPage, int pageSize) {
}
}
如何在查询/命令中集成或注入DBContext?
也许使用带有Save方法的DBContext包装器并公开集合?
或者我应该在Execute方法中创建一个新的上下文?
public List<Post> Execute(int currentPage, int pageSize) {
using (Context = new DBContext) {
}
}
有人可以就此提出建议吗?
答案 0 :(得分:3)
使用构造函数注入,即通过构造函数将上下文传递给服务类。
public class ListPostsQuery {
private DbContext ctx;
public ListPostsQuery( DbContext ctx ) {
this.ctx = ctx;
}
public List<Post> Execute(int currentPage, int pageSize) {
return ctx....
}
}
这样您可以控制一次上下文的生命周期,例如:在控制器工厂或使用您选择的ioc框架。
答案 1 :(得分:2)
我会坚持
using (Context = new DBContext)
{
}
原因是Context不是线程安全的,因此如果您尝试使用相同的上下文同时执行某些操作,则可能会导致数据出现一些非常糟糕的问题。
关于依赖注入:它肯定是很好的模式但是你在这里使用它的利润是多少? - 你仍然与上下文紧密相连...... - 您将无法通过注入存根上下文来测试您的类...