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

时间:2016-03-07 15:18:36

标签: c# asp.net-mvc repository repository-pattern

在我的控制器中,我调用的是一个调用存储过程,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类中做得正确,会更加关注吗?

2 个答案:

答案 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()方法。