在我的控制器中,我调用的是一个调用存储过程,sql ...等的存储库类
即。控制器看起来:
Repository repo = new Repository();
public ActionResult Index()
{
var getservice = repo.GetList(...);
foreach (var servicegroup in ServicesSelected)
{
var Result = repo.CheckStatus(...);
....
}
}
我的存储库类看起来像这样:
public int CheckStatus(...)
{
using (MyAppConnection context = new MyAppConnection())
{
return context.sp_web_Status(...);
}
}
每当我调用sp或do数据库操作时,我都在使用(用于实现IDispose)和调用上下文。
在此操作中的示例中,它调用GetList(),然后有一个它调用的循环,例如5次,每次它生成一个新的上下文,我不认为这是每次生成新上下文的正确方法。
什么是正确的使用方式"一个上下文"并使用"使用"在每个存储库函数中实现IDispose,或者我不应该使用"使用"并创建idisposable类
示例将非常适合正确的方法。
更新 - 想要使用DI框架
在My HomeController中,我是否需要添加对Repository类的引用?
public class HomeController : Controller
{
SubscriptionRepository _repo;
public HomeController (Repository repo)
{
_repo = repo;
}
在Index动作调用存储库类
中 _repo.GetList(...);
Inside Repository类,我和HomeController中做的一样吗?
public class Repository
{
private MyAppConnection _context;
public Repository(MyAppConnection context)
{
_context = context;
}
然后我从CheckStatus中移除了使用,只有
public int CheckStatus(...)
{
return _context.sp_web_Status(...);
}
}
并在NinjectWebCommon中:RegisterServices
我是否同时注册?
kernel.Bind<Repository>().ToSelf().InRequestScope();
kernel.Bind<MyAppConnection>().ToSelf().InRequestScope();
这是使用DI框架和配置MyAppConnection的正确方法吗? 如果我在Repository类中做得正确,会更加关注吗?
答案 0 :(得分:2)
我个人使用依赖注入(DI)框架来管理我的数据库上下文和存储库,我的Web应用程序也有一个DBcontext,它有助于更改跟踪。我发现这个解决方案比使用上下文模式更好。这是一篇非常好的简单文章,解释了您可以使用的模式
http://www.davepaquette.com/archive/2013/03/27/managing-entity-framework-dbcontext-lifetime-in-asp-net-mvc.aspx
答案 1 :(得分:-1)
您可以将整个foreach
循环包装在using
块中,然后将上下文变量作为参数传递给CheckStatus()
方法。