update Sqlite provider page
continuous-integration/drone/push Build is passing Details

master
Marc CHEVALDONNE 2 years ago
parent 794ef4471a
commit 0137bfe6c8

@ -19,8 +19,12 @@ Depuis Visual Studio (mac ou windows), installez les packages NuGet suivants, da
- Microsoft.EntityFrameworkCore - Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Tools - Microsoft.EntityFrameworkCore.Tools
- Microsoft.EntityFrameworkCore.SQLite - 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```. Dans votre classe héritant de DbContext, utilisez la méthode d'extension ```UseSqlite```.
```csharp MyDbContext ```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. 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 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````) : (par exemple depuis le projet dans lequel se trouve votre classe héritant de ```DbContext````) :
``` ```
dotnet ef migrations add myMigrationName dotnet ef migrations add myMigrationName
dotnet ef database update --startup-project path/to/the/startup/project/ dotnet ef database update --startup-project path/to/the/startup/project/
```` ```
## 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<TheDbContext> 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<TheDbContext>().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.
:::

Loading…
Cancel
Save