diff --git a/p08_BDD_EntityFramework/ex_041_004_InMemory/Program.cs b/p08_BDD_EntityFramework/ex_041_004_InMemory/Program.cs index 94ca102..c6c5008 100644 --- a/p08_BDD_EntityFramework/ex_041_004_InMemory/Program.cs +++ b/p08_BDD_EntityFramework/ex_041_004_InMemory/Program.cs @@ -10,7 +10,7 @@ namespace ex_041_004_InMemory Nounours yoda = new Nounours { Nom = "Yoda" }; 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 Console.WriteLine("Creates and inserts new Nounours"); diff --git a/p08_BDD_EntityFramework/ex_041_004_InMemory/ReadMe.md b/p08_BDD_EntityFramework/ex_041_004_InMemory/ReadMe.md index 1563b4a..a50a3d3 100644 --- a/p08_BDD_EntityFramework/ex_041_004_InMemory/ReadMe.md +++ b/p08_BDD_EntityFramework/ex_041_004_InMemory/ReadMe.md @@ -1,5 +1,41 @@ -reprise de l'exemple 041_001 avec seulement SqlServer -nuget, dotnet restore... +# ex_041_004_InMemory +*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 { 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 pour avoir un provider par défaut, mais la possibilité d'en injecter un autre via un constructeur diff --git a/p08_BDD_EntityFramework/ex_041_004_InMemory/SqlServerContext.cs b/p08_BDD_EntityFramework/ex_041_004_InMemory/SqlServerContext.cs deleted file mode 100644 index 276adc7..0000000 --- a/p08_BDD_EntityFramework/ex_041_004_InMemory/SqlServerContext.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Microsoft.EntityFrameworkCore; - -namespace ex_041_004_InMemory -{ - public class SqlServerContext : DbContext - { - public DbSet Nounours { get; set; } - - public SqlServerContext() - { } - - public SqlServerContext(DbContextOptions 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;"); - } - } - } -} diff --git a/p08_BDD_EntityFramework/ex_041_004_UnitTests/NounoursDB_Tests.cs b/p08_BDD_EntityFramework/ex_041_004_UnitTests/NounoursDB_Tests.cs index 32fb62f..8fe34da 100644 --- a/p08_BDD_EntityFramework/ex_041_004_UnitTests/NounoursDB_Tests.cs +++ b/p08_BDD_EntityFramework/ex_041_004_UnitTests/NounoursDB_Tests.cs @@ -11,12 +11,12 @@ namespace ex_041_004_UnitTests [Fact] public void Add_Test() { - var options = new DbContextOptionsBuilder() + var options = new DbContextOptionsBuilder() .UseInMemoryDatabase(databaseName: "Add_writes_to_database") .Options; // 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 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 - using (var context = new SqlServerContext(options)) + using (var context = new NounoursContext(options)) { Assert.Equal(3, context.Nounours.Count()); Assert.Equal("Chewbacca", context.Nounours.First().Nom);