- Add build-error-resolution.md guide for CS0006 and IDE analyzer issues - Add rebuild-solution.ps1 script for clean/reliable builds - Suppress noisy IDE/StyleCop warnings in .editorconfig - Optimize BaseItemRepository grouping queries to use Min(Id) instead of FirstOrDefault, avoiding correlated subqueries and greatly improving DB performance - Add database-query-optimization.md explaining query changes and tuning - Enable EF Core SQL query logging, sensitive data, and detailed errors when log level is Debug (ServiceCollectionExtensions, logging.json) - Update readme with SQL logging instructions - Clarify git commit/ignore guidance and improve inline documentation
2.7 KiB
How to run EFCore migrations
This shall provide context on how to work with entity frameworks multi provider migration feature.
Jellyfin will support multiple database providers in the future, namely SQLite as its default and the experimental PostgreSQL.
Each provider has its own set of migrations, as they contain provider specific instructions to migrate the specific changes to their respective systems.
When creating a new migration, you always have to create migrations for all providers. This is supported via the following syntax:
dotnet ef migrations add MIGRATION_NAME --project "PATH_TO_PROJECT" -- --provider PROVIDER_KEY
with SQLite currently being the only supported provider, you need to run the Entity Framework tool with the correct project to tell EFCore where to store the migrations and the correct provider key to tell Jellyfin to load that provider.
The example is made from the root folder of the project e.g for codespaces /workspaces/jellyfin
dotnet ef migrations add {MIGRATION_NAME} --project "src/Jellyfin.Database/Jellyfin.Database.Providers.Sqlite" -- --migration-provider Jellyfin-SQLite
If you get the error: Run "dotnet tool restore" to make the "dotnet-ef" command available. Run dotnet restore.
in the event that you get the error: System.UnauthorizedAccessException: Access to the path '/src/Jellyfin.Database' is denied. you have to restore as sudo and then run ef migrations as sudo too.
Database Query Logging
To enable SQL query logging for debugging purposes, you need to configure the logging level in your logging.json file located at Resources/Configuration/logging.json.
Enable SQL Query Logging
To see all executed SQL queries in the logs, change the logging level for Entity Framework Core database commands:
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Microsoft.EntityFrameworkCore.Database.Command": "Debug"
}
}
}
}
When Microsoft.EntityFrameworkCore.Database.Command is set to Debug, the following will be logged:
- All SQL queries being executed
- Query parameters (including sensitive data)
- Query execution times
- Detailed error messages
Logging Levels
- Debug: Logs all SQL queries with parameters and execution details
- Information: Logs queries without parameters (default setting in the configuration)
- Warning: Only logs slow queries and warnings
- Error: Only logs database errors
Note: Query logging with sensitive data is automatically enabled when using Debug level. Be careful not to expose sensitive information in production environments.