您可以很容易地使用 t-sql 函数或查询来为您提供所需的信息。尝试使用您想要的任何谓词包装以下内容(例如,WHERE PK.TABLE_NAME = 'My Table' AND C.DELETE_RULE = 'CASCADE'。如果记录 a 存在,那么您已经获得了所需的信息。
SELECT
FK_TableName = FK.TABLE_SCHEMA + '.' + FK.TABLE_NAME,
FK_ColumnName = CU.COLUMN_NAME,
PK_TableName = PK.TABLE_SCHEMA + '.' + PK.TABLE_NAME,
PK_ColumnName = PT.COLUMN_NAME,
ConstraintName = C.CONSTRAINT_NAME,
DeleteRule = C.DELETE_RULE
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;
然后,您可以将其包装到 DbSet 扩展中并调用它,就像context.Set<MyEntity>().UsesCascadeDelete()
使用您的谓词和您想要的任何其他内容触发上述查询一样。
因为 EF 可以很容易地运行 TSQL 查询,所以我仍然认为它们是 EF 的“一部分”。