@ -15,14 +15,19 @@ Cette méthode utilise SqlServer à travers une base de données dans en local.
Vous pouvez vérifier le contenu de votre base en utilisant l'*Explorateur d'objets SQL Server* (voir plus bas).
:::
## NuGet
Depuis Visual Studio (mac ou windows), installez les packages NuGet suivants, dans le projet contenant votre ```DbContext``` et vos entités :
*Utilisez l'une ou l'autre des 2 méthodes suivantes.*
## 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.
### NuGet
Depuis Visual Studio (windows seulement), installez les packages NuGet suivants, dans le projet contenant votre ```DbContext``` et vos entités :
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Tools
- Microsoft.EntityFrameworkCore.SqlServer
## DbContext
Dans votre classe héritant de DbContext, utilisez la méthode d'extension ```UseSqlServer```.
### Code
Dans votre classe héritant de ``` DbContext``` , utilisez la méthode d'extension ```UseSqlServer```.
```csharp MyDbContext
public class MyDbContext : DbContext
@ -40,14 +45,68 @@ public class MyDbContext : DbContext
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```` ) :
(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/
```
## 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.
:::caution 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...(...);
}
}
```
:::
### NuGet
Depuis Visual Studio (mac ou windows), installez les packages NuGet suivants, dans le projet contenant votre ```DbContext``` et vos entités
(cela devrait déjà être fait si vous vous injectez un nouveau fournisseur dans un ```DbContext``` existant déjà) :
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Tools
Puis installez le package Nuget suivant dans le projet qui contiendra la création des options et l'injection dans le contexte
(le projet de démarrage par exemple) :
- Microsoft.EntityFrameworkCore.SqlServer
### Code
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>()
.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=LeNomDe.MaBase.mdf;Trusted_Connection=True;")
.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 (```UseSqlServer```) et la chaîne de connexion (```@"Server=(localdb)\mssqllocaldb;Database=LeNomDe.MaBase.mdf;Trusted_Connection=True;"```).
* 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.
:::
## Comment explorer le contenu de la base de données ?
Vous pouvez vérifier le contenu de votre base en utilisant l'*Explorateur d'objets SQL Server* (voir plus bas).