1

1 つのプロジェクトで使用する 2 つの異なるデータベースに対して Subsonic で生成された 2 つのデータ アクセス レイヤーがあるため、web.config には次のように記述します。

<SubSonicService>
    <providers>
      <add name="BLLDB" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="BLLDB" generatedNamespace="BLLDB" useSPs="true" />
      <add name="BLLDB2" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="BLLDB2" generatedNamespace="BLLDB2" useSPs="true" />
    </providers>
  </SubSonicService>

それでも、いずれかの DAL のコードを呼び出すと、常にリストされている 2 番目のデータ プロバイダー (「BLLDB2」) が使用されるため、「BLLDB から読み取る必要があるときに、無効なオブジェクト名 'dbo.Users'」のようなエラーが発生します。 " (Select() で "BLLDB" を明示的に指定しているにもかかわらず)

たとえば、「BLLDB」DAL の次のコードを確認します。

Dim mySelect As New
SubSonic.Select(Databases.BLLDB)
mySelect.From(Of User)()

「mySelect.ProviderName」は文字列値「BLLDB2」を返します。

一方、「Databases.BLLDB」は文字列値「BLLDB」を返します。

何を与える??

4

6 に答える 6

1

サブソニック2.2サブステージを使用しています。複数のプロバイダーの名前空間を慎重に変更する必要があります。

1つの重要なこと。複数の「AllStructs.vb」ファイルが生成されます。コードによって自動的に繰り返されます。ただし、単一の allstructs.vb を追加する必要があり、別のものを削除するだけで 1000% 動作します。

ここに、Web 構成ファイルの構成設定があります。

 <connectionStrings>
    <add name="aspnetdb" connectionString="Data Source=(local); Database=aspnetdb; Integrated Security=true;"/>
    <add name="office" connectionString="Data Source=(local); Database=office; Integrated Security=true;"/>
</connectionStrings>
<SubSonicService defaultProvider="aspnetdb" enableTrace="false" templateDirectory="">
    <providers>
        <clear/>
        <add name="aspnetdb" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="aspnetdb"/>
        <add name="office" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="office"/>
    </providers>
</SubSonicService>
于 2011-12-09T19:13:19.677 に答える
1

プロバイダーの 1 つに障害が発生しています。サブソニックは、なぜ、どこで失敗したかを伝えるのが得意ではありません。

私は通常、いくつかの方法でデバッグします。

  1. 一度に 1 つのプロバイダーのみを使用し、他のプロバイダーにコメントしてください。名前空間が表示されるかどうかを確認します。両方とも正常にロードされた場合、少なくともデータベースではないことがわかります。

  2. -、_、または数字で始まるテーブルがあるかどうかを確認します。これにより、失敗することもあります。

それがどうなるか教えてください。

于 2009-04-10T16:36:20.597 に答える
1

以下を使用して、デフォルトのプロバイダーを指定できます。

< SubSonicService defaultProvider="BLLDB" >

于 2009-04-10T18:38:05.780 に答える
0

こんにちは、返信ありがとうございます...ロブが「BLLDB」のデフォルトプロバイダーを指定すると、これは同じことになりますが、BLLDB2ではなくBLLDBの場合です

つまり、BLLDB2 ではなく BLLDB からのみ読み取ります。

CodeToGlory、私は最新の dll を使用しており、通常、この問題に遭遇するまで SubSonic の実行に問題はありません。

両方のプロバイダーが動作している場合に、subsonic に使用する web.config エントリを投稿することは可能でしょうか?

どうもありがとう!

PS また、Select() 関数で直接使用するデータ プロバイダーを指定すると、かなり奇妙です。

例えば

Dim mySelect As New SubSonic.Select(Databases.BLLDB)
mySelect.From(Of User)()

そして、私は:

「mySelect.ProviderName」、これは文字列値「BLLDB2」を返します(正しくない)

一方、「Databases.BLLDB」の値を出力すると、文字列値「BLLDB」が返されます(正しい)

これが実際に問題の鍵になる可能性があります...

于 2009-04-11T13:26:09.483 に答える
0

ここで私自身の質問に答えるだけです..VB.NETを介して作業する場合、複数のプロバイダーを使用することは実際には不可能のようです。

これはおそらく C# でのみ機能します (CodeToGlory が言及したように)。いくつかの異なるシナリオを最初からテストしましたが、Subsonic で生成された 2 つの DAL を並べて動作させることはできません。

それらの1つのために自分のものを一緒にハックする必要があります..しかし、アドバイスに乾杯!

于 2009-04-14T12:34:09.990 に答える