我正在用 .NET 8 编写一个应用程序,并使用它Northwind database
来生成存储过程、实体 POCO 类、存储过程包装器、控制器等。
为了确定表之间的关系,我查询了以下模式:
using var connection = new SqlConnection(connectionString);
await connection.OpenAsync();
var schemaTables = await connection.GetSchemaAsync("Tables");
var schemaColumns = await connection.GetSchemaAsync("Columns");
var schemaForeignKeys = await connection.GetSchemaAsync("ForeignKeys");
var schemaIndexes = await connection.GetSchemaAsync("Indexes");
var schemaXXX = await connection.GetSchemaAsync("XXX");
/* Process [schemaXXX]... */
虽然我能够创建表、列等,但ForeignKeys
架构似乎没有关系的两端。考虑以下结果:
我怎样才能得到如下结果:
TYPE PRINCIPLE DEPENDENT
OneToMany Department.Id Employee.DepartmentId
OneToMany Employee.Id Employee.ReportsTo
请注意,我对数据库优先方法、EntityFramework 或其他 ORM 不感兴趣。我需要自己使用 生成实体 POCO 类SqlConnection.GetSchema
。
我也在考虑SQL Server Management Objects
最终使用,但目前还是使用 ADO.NET。
从SQL Server Schema Collections 文档中可以看出,没有您要查找的信息。
相反,您可以使用原始查询来获取该信息。有一篇SO 文章指导如何做到这一点,基于SQL Essentials:外键元数据:改进 INFORMATION_SCHEMA 视图
C# 代码片段: