Files
gwms/GWMS.Data/Readme.md
T
2021-06-22 16:09:17 +02:00

98 lines
3.7 KiB
Markdown

# Appunti gestione GWMS DB
Per la gestione dell'accesso al DB si opera con EFCore --> app blazor server
## Versione MsSql iniziale
Versione iniziale basata su SqlServer
### Scaffolding
Per generare le classi da un DB esistente con cui operare EFCore CodeFirst usare lo scaffolding coi seguenti comandi.
Attenzione: la classe DbContext viene creata INSIEME alle viste nella folder DatabaseModel (nell'esempio seguente...)
#### DB iniziale
Scaffold-DbContext "Server=SQL2016DEV;Database=GWMS;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir DatabaseModels
#### SOLO di tabelle/viste selezionate (con force update)
Scaffold-DbContext "Server=SQL2016DEV;Database=GWMS;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir DatabaseModels -Tables nome_tabella, nome_vista
#### Reset DB MsSql
Per resettare un db MsSql (cancellando tutto x poter ridare update) eseguire il seguente codice
-- drop constraints
DECLARE @DropConstraints NVARCHAR(max) = ''
SELECT @DropConstraints += 'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) + '.'
+ QUOTENAME(OBJECT_NAME(parent_object_id)) + ' ' + 'DROP CONSTRAINT' + QUOTENAME(name)
FROM sys.foreign_keys
EXECUTE sp_executesql @DropConstraints;
GO
-- drop tables
DECLARE @DropTables NVARCHAR(max) = ''
SELECT @DropTables += 'DROP TABLE ' + QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
FROM INFORMATION_SCHEMA.TABLES
EXECUTE sp_executesql @DropTables;
GO
Il DB viene poi rigenerato dal Package Maganer console con
Update-Database
## Versione MySql in produzione
Messa variabile boolean x imporre versione MySql (si potrebbe fare una cosa più "fine-tuned" x selezione aruntime del provider)
Pensata per impiego con MariaDB /MySql in caso linux dotnet 5
Impiegato provider dotnetcore **Pomelo**:
* https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql
* https://www.tektutorialshub.com/entity-framework-core/using-mysql-mariadb-in-entity-framework-core/
### Generazione script
Sono stati ricreati gli script di generazione x MySql cancellando TUTTE le migrations + stato db (ogni file in folder Migrations) + comandi
Add-Migration InitDb
Update-Database
### Generazione DB + utente DB MySql
All'avvio applicazione, prima del seed di dati, viene eseguito un check dell'utente corrente dell'installazione x verifica se esista DB + Utente dedicati (come x applicazioni EgtBW ad esempio)
...da completare codice + descrizione...
## Impiego multi provider
In caso di scelta per impiego di più providers (MsSql, MariaDB, SqlLite, ...) è necessario gestire in modo diverso le classi di inizializzazione del DbContenxt. Non ancora verificato, ma da approfondire secondo i seguenti links:
* Multi provider: https://logu.co/efcore-multiple-providers.html
* Migrations con + providers: https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/providers?tabs=dotnet-core-cli
* Auto update all'avvio progetti (se le migrations sono state generate): https://jasonwatmore.com/post/2019/12/27/aspnet-core-automatic-ef-core-migrations-to-sql-database-on-startup
## Ottimizzazioni e spunti
Alcuni spunti da approfondire:
* Lifetime x DbCOntext secondo casi: https://docs.microsoft.com/en-us/ef/core/dbcontext-configuration/
## Migrations
Approfondimenti:
* https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli
## Approfondimenti
Qualche link di approfondimento:
- https://docs.microsoft.com/en-us/ef/core/
- https://docs.microsoft.com/en-us/ef/core/extensions/
- https://www.entityframeworktutorial.net/efcore/create-model-for-existing-database-in-ef-core.aspx
- https://entityframework.net/ef-code-first