updated sample about InMemory

EFCore3_Reforged
Marc CHEVALDONNE 6 years ago
parent a54a2676f2
commit eff3011fe3

@ -10,7 +10,7 @@ namespace ex_041_004_InMemory
Nounours yoda = new Nounours { Nom = "Yoda" }; Nounours yoda = new Nounours { Nom = "Yoda" };
Nounours ewok = new Nounours { Nom = "Ewok" }; Nounours ewok = new Nounours { Nom = "Ewok" };
using (var context = new SqlServerContext()) using (var context = new NounoursContext())
{ {
// Crée des nounours et les insère dans la base // Crée des nounours et les insère dans la base
Console.WriteLine("Creates and inserts new Nounours"); Console.WriteLine("Creates and inserts new Nounours");

@ -1,5 +1,41 @@
reprise de l'exemple 041_001 avec seulement SqlServer # ex_041_004_InMemory
nuget, dotnet restore... *31/12/2019 ⋅ Marc Chevaldonné*
---
Le fournisseur **InMemory** est utilisé pour tester des bases de données sans avoir à créer réellement une base de données.
Ceci permet de tester les accès à votre "base" de manière toutefois approximative.
En effet, **InMemory** n'est pas une base de données relationnelle : il y a donc des limitations.
Cet exemple montre comment utiliser **InMemory** à travers une injection de dépendance. En d'autres termes, vous continuez à définir votre chaîne de connexion sur une base de données, mais vous permettez néanmoins l'utilisation, à la demande, de **InMemory** pour des tests.
Puisque ce fournisseur devient intéressant dans le cas de tests, j'ai donc ajouté un 2ème projet lié à cet exemple, permettant d'avoir accès à des tests unitaires utilisant **InMemory**.
Pour le reste de l'exemple, celui-ci n'apporte rien de nouveau par rapport à l'exemple ex_041_001.
---
## Comment a été construit cet exemple ?
Cet exemple est tout d'abord construit de la même manière que l'exemple *ex_041_001_ConnectionStrings*.
Il ne faut pas oublier les NuGet nécessaires :
* Microsoft.EntityFrameworkCore : pour le projet en général
* Microsoft.EntityFrameworkCore.SqlServer : pour le *provider* SQL Server
* Microsoft.EntityFrameworkCore.Tools : pour bénéficier des outils de Design, de migrations, etc.
J'ai ensuite décidé de renommer ma classe dérivant de ```DbContext``` en ```NounoursContext``` car je n'ai plus de raison de faire la différence entre SqlServer et SQLite.
On obtient ainsi la classe ```NounoursContext``` suivante :
```csharp
using Microsoft.EntityFrameworkCore;
namespace ex_041_004_InMemory
{
public class NounoursContext : DbContext
{
public DbSet<Nounours> Nounours { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ex_041_004_InMemory.Nounours.mdf;Trusted_Connection=True;");
}
}
```
modification de OnConfiguring modification de OnConfiguring
pour avoir un provider par défaut, mais la possibilité d'en injecter un autre via un constructeur pour avoir un provider par défaut, mais la possibilité d'en injecter un autre via un constructeur

@ -1,24 +0,0 @@
using Microsoft.EntityFrameworkCore;
namespace ex_041_004_InMemory
{
public class SqlServerContext : DbContext
{
public DbSet<Nounours> Nounours { get; set; }
public SqlServerContext()
{ }
public SqlServerContext(DbContextOptions<SqlServerContext> options)
: base(options)
{ }
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
if (!options.IsConfigured)
{
options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ex_041_004_InMemory.Nounours.mdf;Trusted_Connection=True;");
}
}
}
}

@ -11,12 +11,12 @@ namespace ex_041_004_UnitTests
[Fact] [Fact]
public void Add_Test() public void Add_Test()
{ {
var options = new DbContextOptionsBuilder<SqlServerContext>() var options = new DbContextOptionsBuilder<NounoursContext>()
.UseInMemoryDatabase(databaseName: "Add_writes_to_database") .UseInMemoryDatabase(databaseName: "Add_writes_to_database")
.Options; .Options;
// Run the test against one instance of the context // Run the test against one instance of the context
using (var context = new SqlServerContext(options)) using (var context = new NounoursContext(options))
{ {
Nounours chewie = new Nounours { Nom = "Chewbacca" }; Nounours chewie = new Nounours { Nom = "Chewbacca" };
Nounours yoda = new Nounours { Nom = "Yoda" }; Nounours yoda = new Nounours { Nom = "Yoda" };
@ -29,7 +29,7 @@ namespace ex_041_004_UnitTests
} }
// Use a separate instance of the context to verify correct data was saved to database // Use a separate instance of the context to verify correct data was saved to database
using (var context = new SqlServerContext(options)) using (var context = new NounoursContext(options))
{ {
Assert.Equal(3, context.Nounours.Count()); Assert.Equal(3, context.Nounours.Count());
Assert.Equal("Chewbacca", context.Nounours.First().Nom); Assert.Equal("Chewbacca", context.Nounours.First().Nom);

Loading…
Cancel
Save