From 0137bfe6c80015396ae02f2e09894a55c701ce60 Mon Sep 17 00:00:00 2001 From: marcchevaldonne Date: Thu, 2 Feb 2023 16:14:51 +0100 Subject: [PATCH] update Sqlite provider page --- .../Entity-Framework/Providers/SQLite.mdx | 50 +++++++++++++++++-- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/Documentation/docusaurus/docs/Entity-Framework/Providers/SQLite.mdx b/Documentation/docusaurus/docs/Entity-Framework/Providers/SQLite.mdx index d73c8df..faf5474 100644 --- a/Documentation/docusaurus/docs/Entity-Framework/Providers/SQLite.mdx +++ b/Documentation/docusaurus/docs/Entity-Framework/Providers/SQLite.mdx @@ -19,8 +19,12 @@ Depuis Visual Studio (mac ou windows), installez les packages NuGet suivants, da - Microsoft.EntityFrameworkCore - Microsoft.EntityFrameworkCore.Tools - Microsoft.EntityFrameworkCore.SQLite + +*Utilisez ensuite l'une ou l'autre des 2 méthodes suivantes.* -## DbContext +## Méthode 1 : en modifiant une classe fille de ```DbContext``` +Il faut d'abord modifier du code, puis lancer les commandes de migration et de création de la base de données. +### Code Dans votre classe héritant de DbContext, utilisez la méthode d'extension ```UseSqlite```. ```csharp MyDbContext @@ -56,10 +60,50 @@ n'oubliez pas de rajouter la ligne suivante pour lui permettre de la trouver dan Pour le reste de votre projet EntityFrameworkCore, aucune différence avec les méthodes présentées précédemment. -## Migrations et création de la base de données +### Migrations et création de la base de données Vous pouvez maintenant créer les migrations et la base de données à l'aide des commandes classiques (par exemple depuis le projet dans lequel se trouve votre classe héritant de ```DbContext````) : ``` dotnet ef migrations add myMigrationName dotnet ef database update --startup-project path/to/the/startup/project/ -```` \ No newline at end of file +``` + +## Méthode 2 : injection de ```DbContextOptions``` +Cette méthode permet d'utiliser une classe héritant de ```DbContext``` (```TheDbContext``` par exemple) sans en changer le code. + +:::warning Condition sur ```OnConfiguring``` +Il faut néanmoins que la classe fille de ```DbContext``` (par exemple ```TheDbContext```) : +1. possède un constructeur permettant de passer un ```DbContextOptions``` en paramètre. +```csharp TheDbContext +public TheDbContext(DbContextOptions options) + : base(options) +{ +} +``` +2. n'impose pas un fournisseur et une chaîne de connexion dans la méthode OnConfiguring, +par exemple à l'aide d'un ```if(!optionsBuilder.IsConfigured)``` +```csharp TheDbContext +protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) +{ + if(!optionsBuilder.IsConfigured) + { + optionsBuilder.Use...(...); + } +} +``` +::: + +On peut dès lors, avant la création du contexte, créer des options permettant de choisir le fournisseur de la manière suivante : +```csharp Program.cs (ou autre) +var options = new DbContextOptionsBuilder().UseSqlite($"Data Source=LeNomDe.MaBase.db").Options; +var context = new TheDbContext(options); //ou une autre classe dérivant de TheDbContext +await context.Database.EnsureCreatedAsync(); //pour créer la base si elle n'existe pas déjà +``` + +* La première ligne permet de choisir les options, dont le fournisseur (```UseSqlite```) et la chaîne de connexion (```"Data Source=LeNomDe.MaBase.db"```). +* La deuxième ligne crée le contexte en injectant ces options. +* La troisième ligne s'assure que la base de données est bien créée ou qu'elle existait déjà. + +:::note migrations ? +Avec cette méthode, il n'est pas nécessaire de créer les migrations ou la base de données en lignes de commande. +:::