根据用户选择使用不同的数据上下文(注入数据上下文)

本文关键字:上下文 数据 注入 用户 选择 | 更新日期: 2023-09-27 18:33:40

我在MVC 4中制作了一个应用程序,使用javascript图表库,花哨的LINQ语句(groupBys,select等(和JSON(提供图表数据源(来获取报告。一切都很好,性能很棒,除了蓝天什么都没有......但。。。

部署在具有不同站点和数据库的不同国家/位置的系统/应用程序。问题是我的客户需要从所有、部分或其中一个位置获取报告。假设系统部署在洛杉矶、纽约和德克萨斯州。副总统需要获取报告并在下拉列表中选择(或其他什么(以从纽约和德克萨斯州获取数据。后来,他只需要来自洛杉矶的数据,等等......

所有数据库都位于一个本地网络中,因此我将 LINQ 类用于不同的数据上下文。所有上下文(和模型(都是完全相同的(所以以后我可以制作联盟或任何我想要的东西(,并且在我的绝对控制之下。

我的问题是我如何处理这个问题,将上下文重载到某个控制器/方法,但我该怎么做?我一直在寻找一段时间,但无法找到解决方案或进入正轨的东西。

我认为是这样的:

public JsonResult GetData(string? location){
    switch(location){
        case "NY":
            var data = GetMeReportData("NY"); //The idea is that NY calls the NY DataContext inside this method
            break;
        case "LA":
            var data = GetMetReportData("TX"); //And so on...
            break;
    }
}

上面的"示例"只是为了说明我正在尝试做什么......

等待您的回复和建议。谢谢。

根据用户选择使用不同的数据上下文(注入数据上下文)

一种选择是利用工厂模式。

以下示例是该概念的基本实现。

public static MyContext CreateContext(string location)
    {
        MyContext result = null;
        string databaseName = string.Empty;
        switch(location)
        {
           case "NY":
              databaseName = "NyDb";
              break;
          case "LA":
              databaseName = "LaDb";
              break;
        }

        var connectionName = "Name=" + databaseName;
        result = new MyContext(connectionName);
        return result;
    }