begun sample about InMemory

EFCore3_Reforged
Marc CHEVALDONNE 5 years ago
parent 7557bcae1a
commit a54a2676f2

@ -546,6 +546,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_LISEZ-MOI_ !!", "_LISEZ-MO
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ex_041_001_ConnectionStrings", "p08_BDD_EntityFramework\ex_041_001_ConnectionStrings\ex_041_001_ConnectionStrings.csproj", "{097B0926-6663-4B7E-BBBE-DAA7EE278C7C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ex_041_004_InMemory", "p08_BDD_EntityFramework\ex_041_004_InMemory\ex_041_004_InMemory.csproj", "{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ex_041_004_UnitTests", "p08_BDD_EntityFramework\ex_041_004_UnitTests\ex_041_004_UnitTests.csproj", "{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -4522,6 +4526,46 @@ Global
{097B0926-6663-4B7E-BBBE-DAA7EE278C7C}.Release|x64.Build.0 = Release|Any CPU
{097B0926-6663-4B7E-BBBE-DAA7EE278C7C}.Release|x86.ActiveCfg = Release|Any CPU
{097B0926-6663-4B7E-BBBE-DAA7EE278C7C}.Release|x86.Build.0 = Release|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Debug|Any CPU.Build.0 = Debug|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Debug|ARM.ActiveCfg = Debug|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Debug|ARM.Build.0 = Debug|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Debug|ARM64.Build.0 = Debug|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Debug|x64.ActiveCfg = Debug|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Debug|x64.Build.0 = Debug|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Debug|x86.ActiveCfg = Debug|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Debug|x86.Build.0 = Debug|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Release|Any CPU.ActiveCfg = Release|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Release|Any CPU.Build.0 = Release|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Release|ARM.ActiveCfg = Release|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Release|ARM.Build.0 = Release|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Release|ARM64.ActiveCfg = Release|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Release|ARM64.Build.0 = Release|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Release|x64.ActiveCfg = Release|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Release|x64.Build.0 = Release|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Release|x86.ActiveCfg = Release|Any CPU
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184}.Release|x86.Build.0 = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|Any CPU.Build.0 = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|ARM.ActiveCfg = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|ARM.Build.0 = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|ARM64.Build.0 = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|x64.ActiveCfg = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|x64.Build.0 = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|x86.ActiveCfg = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Debug|x86.Build.0 = Debug|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|Any CPU.ActiveCfg = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|Any CPU.Build.0 = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|ARM.ActiveCfg = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|ARM.Build.0 = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|ARM64.ActiveCfg = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|ARM64.Build.0 = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|x64.ActiveCfg = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|x64.Build.0 = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|x86.ActiveCfg = Release|Any CPU
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -4780,6 +4824,8 @@ Global
{56C5A51B-16E9-4F93-9C32-8F91710391E8} = {65DF0C9A-4F06-4361-8DD9-E8360B6325CA}
{AB06CC3B-6D82-48D1-89FC-14C96C77FE7F} = {65DF0C9A-4F06-4361-8DD9-E8360B6325CA}
{097B0926-6663-4B7E-BBBE-DAA7EE278C7C} = {56C5A51B-16E9-4F93-9C32-8F91710391E8}
{94FB8F0A-7BAD-423B-B26E-A1D2DCC62184} = {56C5A51B-16E9-4F93-9C32-8F91710391E8}
{00BDA989-5CC0-42C0-A2D4-B79429F2FE17} = {56C5A51B-16E9-4F93-9C32-8F91710391E8}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8D31C3AE-36FF-4667-A2A7-0E670245A59E}

@ -0,0 +1,10 @@
using System;
namespace ex_041_004_InMemory
{
public class Nounours
{
public int Id { get; set; }
public string Nom { get; set; }
}
}

@ -0,0 +1,24 @@
using System;
namespace ex_041_004_InMemory
{
class Program
{
static void Main(string[] args)
{
Nounours chewie = new Nounours { Nom = "Chewbacca" };
Nounours yoda = new Nounours { Nom = "Yoda" };
Nounours ewok = new Nounours { Nom = "Ewok" };
using (var context = new SqlServerContext())
{
// Crée des nounours et les insère dans la base
Console.WriteLine("Creates and inserts new Nounours");
context.Add(chewie);
context.Add(yoda);
context.Add(ewok);
context.SaveChanges();
}
}
}
}

@ -0,0 +1,33 @@
reprise de l'exemple 041_001 avec seulement SqlServer
nuget, dotnet restore...
modification de OnConfiguring
pour avoir un provider par défaut, mais la possibilité d'en injecter un autre via un constructeur
le constructeur par défaut permettra d'utiliser la version par défaut
on utilise pour ça la propriété IsConfigured
```csharp
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
if (!options.IsConfigured)
{
options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ex_041_004_InMemory.Nounours.mdf;Trusted_Connection=True;");
}
}
```
ajout des constructeurs
```csharp
public SqlServerContext()
{ }
public SqlServerContext(DbContextOptions<SqlServerContext> options)
: base(options)
{ }
```
test
* nouveau projet
* dépendances
* nuget
* écriture du test

@ -0,0 +1,24 @@
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;");
}
}
}
}

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0"/>
</ItemGroup>
</Project>

@ -0,0 +1,39 @@
using ex_041_004_InMemory;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using Xunit;
namespace ex_041_004_UnitTests
{
public class NounoursDB_Tests
{
[Fact]
public void Add_Test()
{
var options = new DbContextOptionsBuilder<SqlServerContext>()
.UseInMemoryDatabase(databaseName: "Add_writes_to_database")
.Options;
// Run the test against one instance of the context
using (var context = new SqlServerContext(options))
{
Nounours chewie = new Nounours { Nom = "Chewbacca" };
Nounours yoda = new Nounours { Nom = "Yoda" };
Nounours ewok = new Nounours { Nom = "Ewok" };
context.Nounours.Add(chewie);
context.Nounours.Add(yoda);
context.Nounours.Add(ewok);
context.SaveChanges();
}
// Use a separate instance of the context to verify correct data was saved to database
using (var context = new SqlServerContext(options))
{
Assert.Equal(3, context.Nounours.Count());
Assert.Equal("Chewbacca", context.Nounours.First().Nom);
}
}
}
}

@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
<PackageReference Include="coverlet.collector" Version="1.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ex_041_004_InMemory\ex_041_004_InMemory.csproj" />
</ItemGroup>
</Project>

@ -6,8 +6,8 @@
* 003 le même avec SecretManager pour les mots de passe ?
* 006 connection resiliency ?
* testing
* 004 SQLite in memory
* 005 InMemory
* 005 SQLite in memory
* 004 InMemory
* configuring a dbcontext ?
* nullable reference types => navigating (include, theninclude)
##### creating a model (42)

Loading…
Cancel
Save