1

Sql 2008 R2 サーバー内に同じスキーマを持つ 2 つのデータベースがあり、その名前はDatabase1Database2です。Database1に接続してクエリを実行した後、Database2に変更し て、次のコードを使用してエンティティを取得しました

this.ConnectionString = "Server=TestServer; Database=Database2;Trusted_Connection=true";
using (IDataAccessAdapter adapter = new DataAccessAdapter(this.ConnectionString))
            {
                var entities = new EntityCollection<T>();
                adapter.FetchEntityCollection(entities, null);
                return entities;
            }

(接続文字列は、コードを実行する前に設定されています)。

アプリケーションをデバッグし、接続文字列の値を調べたところ、Database2 を指していました。

しかし、上記のコードを実行すると、結果はDatabase1から返されました。SQL プロファイラーを見ると、ステートメントはDatabase1に対して実行されていました。

それで、誰が何が起こっていたかを知ることができますか?Database2ではなくDatabase1に対してクエリが実行された理由。

PS: プレーンな ADO.NET で上記の接続文字列を使用すると、Database2 からデータを取得できました。

前もって感謝します。

4

1 に答える 1

1

私は何が起こっているのかを理解しました。その理由は、デフォルトで LLBL Gen Pro は [database1].[dbo].[Customer] のような完全修飾名を使用してデータベース オブジェクトにアクセスし、カタログはエンティティの生成時に指定されるためです。したがって、接続文字列を変更するだけではオブジェクトにアクセスできません。したがって、別のデータベースに変更するには、次のコードを使用してデフォルトのカタログをオーバーライドする必要があります

 var adapter= new DataAccessAdapter(ConnectionString, false, 
                                 CatalogNameUsage.ForceName, DbName)
                             {CommandTimeOut = TenMinutesTimeOut};

詳細については、次のリンクを参照してください。

于 2012-07-17T04:12:35.760 に答える