在我的控制器中,我正在调用一个调用存储过程的存储库类,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 次,每次它都会生成一个新的上下文,我认为这不是每次生成新上下文的正确方法。
使用"一个上下文"并在每个存储库函数中使用"using"来实现IDispose的正确方法是什么,或者我不应该使用"使用"并创建一次性类
示例示例将不胜感激正确的方法。
更新 - 想要使用 DI 框架
在"我的主控制器"中,是否需要添加对存储库类的引用?
public class HomeController : Controller
{
SubscriptionRepository _repo;
public HomeController (Repository repo)
{
_repo = repo;
}
在索引操作调用存储库类内
_repo.GetList(...);
在存储库类中,我是否执行与在 HomeController 中执行的操作相同的操作?
public class Repository
{
private MyAppConnection _context;
public Repository(MyAppConnection context)
{
_context = context;
}
然后我从检查状态中删除使用,只有
public int CheckStatus(...)
{
return _context.sp_web_Status(...);
}
}
在NinjectWebCommon中:RegisterServices
我应该同时注册吗?
kernel.Bind<Repository>().ToSelf().InRequestScope();
kernel.Bind<MyAppConnection>().ToSelf().InRequestScope();
这是使用 DI 框架和处置 MyAppConnection 的正确方法吗?更关心我在存储库类中是否正确?
个人使用依赖注入(DI)框架来管理我的数据库上下文和存储库,并且我的Web应用程序也有一个DBcontext,有助于更改跟踪。我发现这个解决方案比使用上下文模式要好得多。这是一篇非常好的简单文章,解释了您可以使用的模式
http://www.davepaquette.com/archive/2013/03/27/managing-entity-framework-dbcontext-lifetime-in-asp-net-mvc.aspx
您可以将整个foreach
循环包装在using
块中,然后将上下文变量作为参数传递给 CheckStatus()
方法。