在本快速入门中,你将了解 GitHub Copilot 如何通过直接在 Visual Studio Code 中生成上下文感知代码来加速 SQL 和 ORM 开发。 无论是使用 T-SQL 还是使用实体框架、Sequelize、Prisma 或 SQLAlchemy 等 ORM,GitHub Copilot 都可以帮助你搭建表、改进架构并减少重复的脚本,以便可以专注于构建应用程序逻辑。
开始吧
确保已连接到数据库,并使用 MSSQL 扩展打开活动编辑器窗口。 通过此连接, @mssql 聊天参与者可以了解数据库环境的上下文,从而提供准确的上下文感知建议。 如果没有数据库连接,聊天参与者将没有架构或数据上下文来提供有意义的响应。
以下示例使用 AdventureWorksLT2022 示例数据库,可以从 Microsoft SQL Server 示例和社区项目 主页下载该数据库。
为了获得最佳结果,请调整表和架构名称以匹配自己的环境。
确保聊天包含 @mssql 前缀。 例如,键入 @mssql 后跟问题或提示。 这可确保聊天参与者了解你请求与 SQL 相关的帮助。
使用 GitHub Copilot 生成代码
使用 GitHub Copilot 生成反映已连接数据库的结构的 SQL 和 ORM 兼容代码,并遵循最佳做法。 从定义表和关系到脚本视图、生成迁移文件或搭建数据访问层和 API 的基架,GitHub Copilot 可帮助你更快、更自信地移动。
下面是通过聊天参与者可以询问的常见用例和示例:
生成 SQL 代码
GitHub Copilot 可以帮助你为各种开发方案生成 SQL 代码,从脚本编写、创建和修改表到编写存储过程和视图。 这些示例演示如何使用 GitHub Copilot 自动执行重复 SQL 脚本,并遵循 T-SQL 开发的最佳做法。
- 以 SalesLT语句形式CREATE TABLE编写架构中的所有表的脚本SQL。
- 
              SQL在当前数据库中编写存储过程。 该过程应从SalesLT.Customer表中LastName检索与给定参数匹配的所有客户。 请确保使用 T-SQL 最佳做法。
- 将 SalesLT.Customer表脚本编写为CREATE TABLE语句,包括所有约束和索引。
- 生成一个SQL脚本来创建一个视图,该视图联接SalesLT.Customer和SalesLT.SalesOrderHeader表并显示客户名称及其订单总额。
- 编写一个SQL脚本,通过向SalesLT.Customer表中添加一个默认时间戳的last_updated列来进行更改。
生成 ORM 迁移
GitHub Copilot 可以根据所选的架构上下文和框架生成 ORM 兼容的迁移和模型定义。 从 Sequelize 到 Entity Framework、Prisma 和 SQLAlchemy,GitHub Copilot 可帮助搭建与应用程序数据模型相符的基架更改。
- 生成 Sequelize (JavaScript) 模型以将列 ( - email) 添加到- varchar(256)- SalesLT.Customer表中。
- 在 C# 中生成一个 Entity Framework 模型类,以表示一个包含 - SalesLT.ProductModel、- id和- name列的- description表。
- 基于现有 - SalesLT.Product表在 C# 中生成实体框架模型。
- 编写 SQLAlchemy 代码以定义 - SalesLT.OrderDetails具有- id、- order_date字段和- customer_id字段的表,确保与- Python表的兼容性。
- 使用 SQLAlchemy 编写参数化查询,该查询从 - SalesLT.Customer- LastName表中检索与提供的参数匹配的所有客户。
- 更新现有的 Prisma 模型(schema.prisma),以定义一个包含 - SalesLT.Order、- id和- customer_id字段的新- order_date模型。
- 为 - SalesLT.Product表生成 SQLAlchemy 模型类,包括列和数据类型。
生成样本应用代码
GitHub Copilot 还可以帮助搭建与 SQL 数据库交互的后端和前端组件。 这些示例演示如何使用常用堆栈(如 Azure Functions、Node.js、Django 和 Next.js)从架构转到工作应用程序代码。
无服务器后端 SQL 绑定与 Blazor
以下示例演示了可与 GitHub Copilot Chat 一起使用的完整提示,以搭建端到端解决方案的基架。 这些提示包括详细说明和上下文,以帮助 Copilot 跨后端层和前端层生成准确的结构化代码。
使用适用于 Functions 和 Blazor WebAssembly 的 Azure SQL 绑定生成全堆栈应用。 执行以下步骤:
- 后端:Azure Functions(C#),SQL 绑定 - 配置为 SQL Bindings从SalesLT.Customer表中自动读取和写入数据。
- 使用以下终结点实现 HTTP 触发的函数: - 
              GET /api/customers– 获取所有客户。
- 
              GET /api/customers/{id}– 按 ID 获取特定客户。
- 
              POST /api/customers- 创建新客户。
- 
              PUT /api/customers/{id}– 更新现有客户。
- 
              DELETE /api/customers/{id}– 删除客户。
 
- 
              
- 使用 Dependency Injection进行数据库连接和日志记录。
- 包含一个 appsettings.json文件,用于存储数据库连接字符串和环境变量。
- 使用Azure Functions Core Tools在本地运行和测试函数。
 
- 配置为 
- 前端:Blazor WebAssembly (可选) - 创建一个使用 API 的Blazor WebAssembly前端。
- 显示包含客户数据和表单的表以添加新客户。
- 使用 HttpClient调用Azure Functions终结点。
- 实现双向数据绑定以动态处理表单输入。
- 使用 Bootstrap或Blazor组件设置样式和布局。
 
- 创建一个使用 API 的
确保项目包括有关在本地运行 Azure Functions 后端和 Blazor WebAssembly 前端的安装说明,以及数据库连接的正确 .env 或 local.settings.json 配置。
具有 Node.js 和 Next.js 的 Full-Stack
下面是 GitHub Copilot Chat 中提供的详细提示,用于生成完整的后端设置,包括 API 路由和数据库集成。
使用 Express 和 Node.js 生成一个连接到本地 SQL 数据库的 REST API。 将 Tedious 包用于 SQL Server 连接,将 Prisma 用作 ORM。 执行以下步骤:
- 后端:Node.js + Express - 使用Prisma和Tedious作为SQL服务器驱动程序,建立数据库连接。
- 使用以下终结点实现 API 路由 SalesLT.Customer:- 
              GET /customers– 获取所有客户。
- 
              GET /customers/:id– 按 ID 获取特定客户。
- 
              POST /customers- 创建新客户。
- 
              PUT /customers/:id– 更新现有客户。
- 
              DELETE /customers/:id– 删除客户。
 
- 
              
- 配置 Prisma映射SalesLT.Customer表,并使用prisma migrate dev生成数据库迁移。
- 使用 dotenv用于环境变量(数据库凭据、端口等)。
- 添加 Jest用于测试 API 终结点。
 
- 使用
- 前端:Next.js + TypeScript (可选) - 创建一个使用 API 的Next.js前端。
- 显示包含客户数据和表单的表以添加新客户。
- 使用 React钩子(useState和useEffect)动态管理状态和提取数据。
- 使用 Tailwind CSS. 设置 UI 样式。
- 实现服务器端数据提取(getServerSideProps)在Next.js中以提高性能。
 
- 创建一个使用 API 的
确保项目包含独立运行后端和前端的设置说明,以及数据库连接的正确 .env 配置。
后端:Django + Django REST 框架
下面是 GitHub Copilot Chat 中提供的详细提示,用于生成完整的后端设置,包括 API 路由和数据库集成。
使用Django为Django REST Framework表搭建SalesLT.Customer的后端架构。 执行以下步骤:
- 使用 Django 的 - ModelViewSet实现 API 路由,包含以下终结点:- 
              GET /customers– 获取所有客户。
- 
              GET /customers/{id}– 按 ID 获取特定客户。
- 
              POST /customers- 创建新客户。
- 
              PUT /customers/{id}– 更新现有客户。
- 
              DELETE /customers/{id}– 删除客户。
 
- 
              
- 添加有关使用 - python manage.py makemigrations和- migrate生成数据库迁移的说明。
反馈:代码生成
为了帮助我们优化和改进 MSSQL 扩展的 GitHub Copilot,请使用以下 GitHub 问题模板提交反馈: GitHub Copilot 反馈
提交反馈时,请考虑包括:
- 测试方案 – 告诉我们你关注哪些领域,例如架构创建、查询生成、安全性、本地化。 
- 效果良好 - 描述任何感觉流畅、有用或超出预期的体验。 
- 问题或漏洞 – 包括任何问题、不一致或令人困惑的行为。 屏幕截图或屏幕录制特别有用。 
- 改进建议 - 分享改进可用性、扩大覆盖范围或增强 GitHub Copilot 响应的想法。