我有一个应用程序,它将从各种数据库生成报告,每个数据库都具有相同的模式。 DB1,DB2,DB3和DBx之间的唯一区别是数据。所有表格,视图等在结构上都是相同的。
对于我的应用程序中的每个参与数据库,我创建了一个独特的Linq to SQL DataContext。
我正在创建一个ReportHelper类,它将从底层数据生成报告。我希望能够调用像“GetCustomerSales”这样的方法并让它为我的报告吐出数据。问题是我想在调用它之前传递或设置GetCustomerSales方法的DataContext(理想情况下在构造ReportHelper类时)。
但是,我的GetCustomerSales方法要求我使用特定的DataContext,并且我不想为应用程序中使用的每个潜在DataContext反复创建此方法。这里的正确方法是什么?
答案 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
}