创建一个允许变量datacontext的C#类

时间:2011-11-29 14:16:02

标签: c# generics datacontext

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

对于我的应用程序中的每个参与数据库,我创建了一个独特的Linq to SQL DataContext。

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

但是,我的GetCustomerSales方法要求我使用特定的DataContext,并且我不想为应用程序中使用的每个潜在DataContext反复创建此方法。这里的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

拥有与通用架构匹配的单个数据上下文。不同之处在于,您应该为构造函数提供适当的连接字符串(或连接),而不是仅使用new SomeDataContext()

var db = new SomeDataContext(connectionString);

var db = new SomeDataContext(connection);

现在您只需要多个连接字符串,这比多个数据上下文更容易。那里有两个选择;你可以在配置中存储多个字符串(如果它们每个都需要不同的用户帐户等,这尤其有用);或者 - 您可以使用SqlConnectionStringBuilder在运行时创建连接字符串,指定相应的数据库。

说明; every site in the StackExchange network最终是一个不同的数据库,但它们都使用相同的数据上下文类型。我们简单地告诉它在运行时的连接(根据您访问的主机名)。

答案 1 :(得分:2)

您可以通过将连接字符串传递给数据上下文来解决此问题。

public class DataRepository
{
   private MyDataContext ctx;

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