1

我正在使用 LINQ to SQL 类DataContext连接到我的数据库。我有三个具有相同架构的数据库DevelopmentStagingLive. 我已经意识到,如果它们具有相同的模式,我可以使用相同的 DataContext 连接到它们——只需更改我传递给 DataContext 构造函数的连接字符串。我已经声明了一个接口,以便对创建 DataContext 的所有调用都通过它:

public interface IDataContextCreator
    {
        MyDataContext CreateDataContext();
    }

现在我可以有这个接口的具体实现来连接到Development数据库。StagingLive

我现在想隐藏我的 DataContext 构造函数,以强制所有对创建DataContext的调用都通过上述接口。如果我将DataContext的可访问性更改为internal,则无法在解决方案的其他项目中使用它。理想情况下,我希望将类可访问性修饰符保留为,public但将构造函数更改为internal. 有没有办法在自动生成的类中做到这一点?这个问题还有其他解决方案吗?

谢谢你。

编辑: 乔恩你是对的,应该制作构造函数internal。我的数据层中有这些,我不希望其他项目/层中的类访问这些构造函数。然而,他们应该只能使用接口创建DataContext,然后使用创建的DataContext——因为它将在类级别上是公共的。

4

2 回答 2

2

您可以在http://l2st4.codeplex.com/用 T4 模板替换 VS 代码生成。有了这个,您就可以修改构造函数的代码,使其受到保护而不是公开。

但是,我想知道为什么您要使用单独的数据上下文,而不是仅仅更改配置文件中的连接信息并使用转换来为您的特定构建操作提取适当的连接字符串。请参阅http://msdn.microsoft.com/en-us/library/dd465326.aspx

于 2012-10-10T13:58:59.003 回答
1

您可以将构造函数声明为受保护。

public class MyDataContext : DataContext {
    protected MyDataContext() {
    }
}
于 2012-10-10T13:58:08.700 回答