私のWebアプリケーションで亜音速2.2を使用します。私は多くのテーブルを持つデータベースを持っています。 は、あまりにも多くのGetSchemaへの最初の呼び出しは、このクエリで長時間ハング外部キーの数が取得した場合:私はSQLDataProviderでGetTableSchemaコールまで追跡実行時に亜音速の情報スキーマ
SELECT
FK_Table = FK.TABLE_NAME,
FK_Column = CU.COLUMN_NAME,
PK_Table = PK.TABLE_NAME,
PK_Column = PT.COLUMN_NAME,
Constraint_Name = C.CONSTRAINT_NAME,
Owner = FK.TABLE_SCHEMA
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN
(
SELECT i1.TABLE_NAME, i2.COLUMN_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
)
PT ON PT.TABLE_NAME = PK.TABLE_NAME
。私のコードで
私は動的な列を持つテーブルを追跡して、テーブルを照会しています: (それは重要ことを確認していないアプリでDBにちょうど最初のクエリ。)
SubSonic.Select select3 = new SubSonic.Select();
SubSonic.SqlQuery
query3.Where("[MY_TABLE_NAME_IS_PRIVATE]").IsEqualTo("[MY_TABLE_NAME_IS_PRIVATE]");
List<[MY_TABLE_NAME_IS_PRIVATE]> subSonicList3 = query3.ExecuteTypedList<[MY_TABLE_NAME_IS_PRIVATE]>();
query3.Where(...)
はGetSTableSchema
と呼ばれ、呼び出されます(SQLプロファイラでキャッチ)
私の最初の質問は、なぜサブソニックがスキーマを見ているのですか?私のデータレイヤーを生成するとき、それはスキーマとクラスと関係を構築しましたか?
私の2番目の質問は:私はそれを止めることができますか?これは設定可能ですか?
:With SubSonic is there a way to express relationships without foreign keys?
ランタイム亜音速(少なくとも2.xの)ATが存在するために、任意の実際の外部キーには依存しません。情報スキーマは、DAL生成中にのみ照会されます。
これは本当ですか?私の設定で何かが間違っている可能性がありますか?
私はShareDBConnectionScopeを使用しています。これは、類似のスキーマを持つ複数のカスタムテーブルがあるためです。
2番目のコードブロックにコードがありません。これはコンパイルされません。そして、[MY_TABLE_NAME_IS_PRIVATE]はテーブル名だけでなく、修飾されたカラム名であることを確認してください。変更された表名と列名を持つ実際のコードを投稿することを検討してください。 – marapet