我使用LINQ to SQL Classes ( DataContext )连接到我的数据库。我有三个具有相同架构的数据库:Development
,Staging
和Live
。我已经意识到,如果它们具有相同的模式,我可以使用相同的DataContext连接到它们 - 只需更改我传入DataContext构造函数的连接字符串。我已经声明了一个接口,以便所有对DataContext创建的调用都通过它:
public interface IDataContextCreator
{
MyDataContext CreateDataContext();
}
现在,我可以让此接口的概念实现连接到Development
,Staging
或Live
数据库。
我现在想 隐藏我的DataContext构造函数 以强制所有对 DataContext 创建的调用都通过上面的界面。如果我将 DataContext 的可访问性更改为internal
,则无法在解决方案中的其他项目中使用它。理想情况下,我希望将类可访问性修饰符保留为public
,但将构造函数更改为internal
。有没有办法在自动生成的类中执行此操作?这个问题还有其他解决办法吗?
谢谢。
修改
Jon,你是对的,构造函数应该是internal
。我在数据层中有这些,我不希望其他项目/图层中的类到达这些构造函数。但是,他们应该只能使用界面创建 DataContext ,然后使用创建的 DataContext - 因为它在类级别是公开的。
答案 0 :(得分:2)
您可以使用http://l2st4.codeplex.com/处的T4模板替换VS code gen。有了这个,你就可以修改构造函数代码spit来保护而不是公开。
但是,我不得不想知道为什么使用单独的数据上下文而不仅仅是更改配置文件中的连接信息,并使用转换为特定的构建操作提取适当的连接字符串。见http://msdn.microsoft.com/en-us/library/dd465326.aspx
答案 1 :(得分:1)
您可以将构造函数声明为受保护。
public class MyDataContext : DataContext {
protected MyDataContext() {
}
}