1

私のアプリケーションには.SDF、クライアントがサポートしている場合はデータのファイル (SQL Server Compact) を実行する機能があり、クライアントが.SDFファイルをサポートしていない場合は SQL Server データベースを実行する機能があります。唯一の問題は、私がどちらを扱っているかにかかわらず、共通のトラックに集中するコードを書くことです。私がこれでどこに行くのか、いくつかの例を挙げましょう。

データベースがサーバーにリンクされているかどうか、または からデータベースにアクセスしているかどうかを確認するために何かをする必要があるたびに、条件ステートメントを作成する必要がないようにしたい.SDFので、構文を (SQL から Linq) に切り替えました。sql to linq 構文を使用できるように、テーブルとフィールドをマップする .dbml ファイルが 2 つあります。私の唯一の問題は、2 つの .dbml ファイルが同じプロジェクトに存在する場合、パブリック宣言があるために衝突することです。私が知る限り、これらのクラスを正確にプライベートにしたり、何らかの形で分離したりすることはできません。そのため、名前とフィールドが同じであっても、クラスに複数の署名があることを示すエラーがスローされません。

Public Sub SDFAccess()
        Dim dc As New Members("Data Source = C:\Members.sdf")  

        Dim q = _
            From Leader In dc.GetTable(Of Roles)() _
            Select Leader

        DataGridView2.DataSource = q
 End Sub

 Public Sub ServerAccess()
        Dim dc As New ServerDBDataContext()

        Dim q = _
            From sLeader In dc.GetTable(Of ServerRole)() _
            Select sLeader

        DataGridView2.DataSource = q
    End Sub

両方の条件で実行されるサブを 1 つだけ持つことができる必要があります。データが SQL Server データベースまたは SQL Server データベースから取得されているかどうかに関係なく.SDF。お時間をいただきありがとうございます。

Update-1.DBMLそれで、 Designer ファイルで New() のオーバーロードに 気付きました。.DBML両方のデータ ソースが同一である限り、サーバー アクセスまたはコンパクト アクセスのいずれかに 1 つのファイルのみを使用することは可能ですか?

Update-2 また、すべてが同じである場合、2 つの間で私を妨げているのは、サーバーファイル.DBMLの System.Data.Linq.Mapping.DatabaseAttribute(Name:="TestServer")> 属性だけだと思います。.DBML

Update-3 わかりました新しいアプローチ、多分... 2 つの別々に生成された.DBMLファイルから両方のクラスを含め、必要なプロパティのみを使用して、コンテキストをデータソースに送信することができます。ここでも問題は、何らかのアクションを実行するたびに、名前空間内のクラスを無視し、条件を書き込まないようにプログラムを強制する方法です。データセットを仲介物として使用するだけでよいのではないかと考え始めています。私は本当にこれのためにLinq-Sqlを手に入れたいと思っていました。

4

0 に答える 0