根据用户选择使用不同的DataContext(注入datacontext)

时间:2014-12-09 17:50:54

标签: c# linq

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

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

所有数据库都在一个本地网络中,因此我使用LINQ类来处理不同的数据上下文。所有上下文(和模型)完全相同(所以稍后我可以制作Unions或我想要的任何内容)并且完全由我控制。

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

我认为是这样的:

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;
    }

}

上面的“例子”只是为了说明我要做的事情......

等待你的回复&建议。感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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;
    }