我在我的web应用程序中使用亚音速2.2。我有一个包含很多表的数据库。 当外键的数量得到太多的getSchema第一个电话挂了很长时间与此查询:运行时亚音速查询信息架构
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
我追查到的SqlDataProvider的GetTableSchema电话。
在我的代码,我查询,用于跟踪与动态列一个表的表: (不知道它的问题只是在程序的第一个查询到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 Profiler捕获它)
我的第一个问题是:为什么Subsonic在查看Schema?它在生成我的数据层时构建了模式以及类和关系?
我的第二个问题是:我可以让它停止吗?这是可配置的吗?
来自:With SubSonic is there a way to express relationships without foreign keys?
在运行时亚音速(至少2.X)不依赖于任何真正的外键存在。信息模式仅在DAL生成期间被查询。
这是真的吗?是否有可能我的配置有问题。
我使用ShareDBConnectionScope由于多个数据库具有类似架构,但一些自定义表。
在第二个代码块中没有代码,这不能编译。请确认'[MY_TABLE_NAME_IS_PRIVATE]'不仅是一个表名,而且是一个合格的列名。考虑发布修改过的表名和列名的真实代码。 – marapet 2012-01-28 23:23:40