SQL Schema Management Skill
Overview
MoreSpeakers.com uses a "Script-Load" pattern via .NET Aspire (MoreSpeakers.AppHost) to initialize the SQL Server container. We DO NOT use dotnet ef migrations.
Source of Truth
The database schema is defined in scripts/database/.
Workflow
1. Identify the Change
Determine if you need a new table, a modified column, or new seed data.
2. Locate the Loading Logic
Check src/MoreSpeakers.AppHost/AppHost.cs. Look for the sqlText concatenation logic:
csharp1var sqlText = string.Concat( 2 File.ReadAllText(Path.Combine(path, @"../../scripts/database/create-database.sql")), 3 " ", 4 File.ReadAllText(Path.Combine(path, @"../../scripts/database/create-tables.sql")), 5 // ... other files 6);
3. Apply the Change
Option A: Modify Existing Files (Preferred for clean slate)
- If adding a core table, add T-SQL to
scripts/database/create-tables.sql. - If adding a view, use
scripts/database/create-views.sql.
Option B: Create New Script (For specific updates)
- Create a new file, e.g.,
scripts/database/update-schema-features.sql. - CRITICAL: You MUST update
AppHost.csto include this new file in thestring.Concatlist, or it will be ignored.
4. Writing SQL
- Idempotency: Always write idempotent SQL. The script may run on container startup.
sql
1IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'MyTable') 2BEGIN 3 CREATE TABLE MyTable (...) 4END - Foreign Keys: Ensure referenced tables are created before the table defining the key (check file order in
AppHost.cs).
5. Verification
- Run
dotnet run --project src/MoreSpeakers.AppHost. - The container will spin up and execute the concatenated SQL script.
PROHIBITED ACTIONS
- ❌
dotnet ef migrations add - ❌
dotnet ef database update - ❌ Modifying the DbContext
OnModelCreatingwithout adding corresponding SQL scripts.