1

LINQ to SQL クラス( DataContext )を使用して DB に接続しています。DevelopmentStagingおよびという同じスキーマを持つ 3 つのデータベースがありLiveます。それらが同一のスキーマを持っている場合、DataContext コンストラクターに渡す接続文字列を変更するだけで、同じ DataContext を使用してそれらに接続できることに気付きました。DataContext の作成へのすべての呼び出しがそれを通過するように、インターフェイスを宣言しました。

public interface IDataContextCreator
    {
        MyDataContext CreateDataContext();
    }

Developmentこれで、StagingまたはLiveDBに接続するために、このインターフェイスの具体的な実装を行うことができます。

DataContext コンストラクターを非表示にして、 DataContextの作成へのすべての呼び出しが上記のインターフェイスを通過するようにします。DataContextのアクセシビリティを に変更するとinternal、ソリューション内の他のプロジェクトで使用できなくなります。理想的には、クラスのアクセシビリティ修飾子をそのままにしてpublic、コンストラクターを に変更したいと思いますinternal。自動生成されたクラスでこれを行う方法はありますか? この問題に対する他の解決策はありますか?

ありがとうございました。

編集: Jonあなたは正しいコンストラクターを作成する必要がありますinternal。これらはData Layerにあり、他のプロジェクト/レイヤーのクラスがこれらのコンストラクターに到達することは望ましくありません。ただし、インターフェイスを使用してDataContextを作成し、作成されたDataContextを使用することしかできません。これは、クラス レベルで公開されるためです。

4

2 に答える 2

2

http://l2st4.codeplex.com/で VS コード gen を T4 テンプレートに置き換えることができます。これにより、コンストラクター コード スピットをパブリックではなく保護されるように変更できます。

ただし、構成ファイル内の接続情報を変更するだけでなく、変換を使用して特定のビルド操作に適切な接続文字列をプルするのではなく、別のデータ コンテキストを使用している理由を不思議に思う必要があります。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 に答える