创建一个允许变量数据上下文的c#类

本文关键字:上下文 数据 变量 许变量 一个 创建 | 更新日期: 2023-09-27 18:16:00

我有一个应用程序,它将从各种数据库生成报告,每个数据库都具有相同的模式。DB1、DB2、DB3和DBx之间的唯一区别是数据。所有的表、视图等在结构上都是相同的。

对于我的应用程序中的每个参与DB,我已经创建了一个不同的Linq to SQL DataContext。

我正在创建一个ReportHelper类,它将从底层数据生成报告。我希望能够调用像"GetCustomerSales"这样的方法,并让它为我的报告返回数据。问题是我想在调用GetCustomerSales方法之前传递或设置它的DataContext(理想情况下是在构造ReportHelper类时)。

然而,我的GetCustomerSales方法希望我使用一个特定的DataContext,我不想为应用程序中使用的每个潜在的DataContext一遍又一遍地创建这个方法。这里正确的方法是什么?

创建一个允许变量数据上下文的c#类

有一个单一的数据上下文,它匹配公共模式。不同之处在于,您不应该只使用new SomeDataContext(),而应该向构造函数提供一个适当的连接字符串(或连接):

var db = new SomeDataContext(connectionString);

var db = new SomeDataContext(connection);

现在您所需要的是多个连接字符串,这比多个数据上下文更容易。有两种选择;你可以存储多个字符串,也许在配置(这是特别有用的,如果他们每个需要不同的用户帐户等);或者-您可以使用SqlConnectionStringBuilder在运行时创建连接字符串,指定适当的数据库。

说明;StackExchange网络中的每个站点最终都是一个不同的数据库,但它们都使用相同的数据上下文类型。我们只需告诉它运行时的连接(基于您访问的主机名)。

您可以通过向数据上下文传递连接字符串来绕过它。

public class DataRepository
{
   private MyDataContext ctx;
public DataRepository(string connection){
    ctx = new MyDataContext(connection);
}
//now you can use your context
}