私はこれが古いことを知っていますが、これが私のやり方です(@ Sebaのやり方がとても好きですが、試したことはありません)
これは、DBML ファイルが独自のクラス ライブラリに存在することを前提としています。これは、エンティティとデータ アクセスを複数の Web サイトや他のクラス ライブラリで共有する場合に最も便利であることがわかりました。また、各プロジェクトで接続文字列に同じ名前を付けていることも前提としています。さまざまな環境に展開するときに、NAnt を使用してこれを設定します。
私はこれを@tvanfossonからの上記のトップアンサーに基づいています-その人への称賛。
- LinqDataContext から派生する独自の基本クラスを作成する
VBコードは次のとおりです。
Imports System.Configuration
Public Class CustomDataContextBase
Inherits System.Data.Linq.DataContext
Implements IDisposable
Private Shared overrideConnectionString As String
Public Shared ReadOnly Property CustomConnectionString As String
Get
If String.IsNullOrEmpty(overrideConnectionString) Then
overrideConnectionString = ConfigurationManager.ConnectionStrings("MyAppConnectionString").ConnectionString
End If
Return overrideConnectionString
End Get
End Property
Public Sub New()
MyBase.New(CustomConnectionString)
End Sub
Public Sub New(ByVal connectionString As String)
MyBase.New(CustomConnectionString)
End Sub
Public Sub New(ByVal connectionString As String, ByVal mappingSource As System.Data.Linq.Mapping.MappingSource)
MyBase.New(CustomConnectionString, mappingSource)
End Sub
Public Sub New(ByVal connection As IDbConnection, ByVal mappingSource As System.Data.Linq.Mapping.MappingSource)
MyBase.New(CustomConnectionString, mappingSource)
End Sub
End Class
- DBML ファイルを開き、[プロパティ] で、上記のクラス名を [基本クラス] プロパティに追加します。
カスタム データ コンテキスト クラスを同じアセンブリに配置した場合は、単にクラス名 (例: CustomDataContext) を含めることに注意してください。
それらが異なるアセンブリにある場合は、MyCo.MyApp.Data.CustomDataContext などの完全修飾名を使用します。
- Designer が適切に機能するようにするには、接続文字列をクラス ライブラリの app.config ファイルにコピーします。これは、IDE 以外では使用されません。
それでおしまい。
接続文字列に同じ名前を付ける必要があります
基本的に行っていることは、DBML ファイルに設定された接続情報を無視するようにデータ コンテキストを強制することです。ConfigurationManager メソッドを使用すると、呼び出し元のアセンブリから接続文字列が取得されます。
HTH