用于调用存储库类的 MVC 语法



在我的控制器中,我正在调用一个调用存储过程的存储库类,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() 方法。

最新更新