delete old sample version

EFCore3_Reforged
Marc CHEVALDONNE 5 years ago
parent f5f79cb5ee
commit 68179ed5c2

@ -1,47 +0,0 @@
// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
// marc.chevaldonne.free.fr
//
// Module : Album.cs
// Author : Marc Chevaldonné
// Creation date : 2016-10-19
//
// ========================================================================
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ex_042_008_EF_CF_One_to_Many
{
/// <summary>
/// Album est une classe POCO, i.e. Plain Old CLR Object.
/// Elle a une relation 1-many avec la classe Morceau via la propriété Morceaux.
/// La clé primaire est générée lors de l'insertion en table.
/// </summary>
[Table("Albums")]
public class Album
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UniqueId
{
get; set;
}
public string Titre
{
get; set;
}
public DateTime DateDeSortie
{
get; set;
}
public virtual ICollection<Morceau> Morceaux { get; set; } = new List<Morceau>();
}
}

@ -1,31 +0,0 @@
// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
// marc.chevaldonne.free.fr
//
// Module : AlbumDBEntities.cs
// Author : Marc Chevaldonné
// Creation date : 2016-10-19
//
// ========================================================================
using Microsoft.EntityFrameworkCore;
namespace ex_042_008_EF_CF_One_to_Many
{
/// <summary>
/// La classe qui dérive de DbContext est celle qui permettra de faire les opérations CRUD sur le modèle.
/// Cette classe contient deux DbSet<T> pour permettre de réaliser des opérations CRUD sur les types T, ici Album et Morceau.
/// </summary>
public class AlbumDBEntities : DbContext
{
public virtual DbSet<Album> Albums { get; set; }
public virtual DbSet<Morceau> Morceaux { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=ex_042_008_EF_CF_One_to_Many.Albums.mdf;Trusted_Connection=True;");
}
}
}

@ -1,85 +0,0 @@
// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
// marc.chevaldonne.free.fr
//
// Module : DbContextInitializer.cs
// Author : Marc Chevaldonné
// Creation date : 2016-10-19
//
// ========================================================================
using Microsoft.EntityFrameworkCore;
using System;
namespace ex_042_008_EF_CF_One_to_Many
{
/// <summary>
/// initialiseur de stratégies...
/// </summary>
public static class DbContextInitializer
{
/// <summary>
/// remplissage de la base avec des données stubbées.
/// </summary>
/// <param name="context">base à remplir</param>
public static void Seed(AlbumDBEntities context)
{
SetInitializer(context, InitializationStrategies.DropCreateDatabaseAlways);
Album kindofblue = new Album { Titre = "Kind of Blue", DateDeSortie = new DateTime(1959, 8, 17) };
Morceau[] kindofblueMorceaux = { new Morceau { Album = kindofblue, Titre = "So What" },
new Morceau { Album = kindofblue, Titre = "Freddie Freeloader" },
new Morceau { Album = kindofblue, Titre = "Blue in Green" },
new Morceau { Album = kindofblue, Titre = "All Blues" },
new Morceau { Album = kindofblue, Titre = "Flamenco Sketches" } };
foreach (var m in kindofblueMorceaux) kindofblue.Morceaux.Add(m);
Album dialogue = new Album { Titre = "Dialogue", DateDeSortie = new DateTime(1965, 9, 1) };
Morceau[] dialogueMorceaux = { new Morceau { Album = dialogue, Titre = "Catta" },
new Morceau { Album = dialogue, Titre = "Idle While" },
new Morceau { Album = dialogue, Titre = "Les Noirs Marchant" },
new Morceau { Album = dialogue, Titre = "Dialogue" },
new Morceau { Album = dialogue, Titre = "Ghetto Lights" },
new Morceau { Album = dialogue, Titre = "Jasper" } };
foreach (var m in dialogueMorceaux) dialogue.Morceaux.Add(m);
context.Albums.AddRange(new Album[] { kindofblue, dialogue });
context.Morceaux.AddRange(kindofblueMorceaux);
context.Morceaux.AddRange(dialogueMorceaux);
context.SaveChanges();
}
/// <summary>
/// les différentes stratégies de création de la base
/// </summary>
public enum InitializationStrategies
{
CreateDatabaseIfNotExists,
DropCreateDatabaseIfModelChanges,
DropCreateDatabaseAlways
}
public static void SetInitializer(DbContext context, InitializationStrategies strategy)
{
switch (strategy)
{
//par défaut : crée la base seulement si elle n'existe pas
default:
case InitializationStrategies.CreateDatabaseIfNotExists:
context.Database.EnsureCreated();
break;
//recrée la base même si elle existe déjà
case InitializationStrategies.DropCreateDatabaseAlways:
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
break;
//recrée la base seulement si le modèle change : impossible aujourd'hui en Entity Framework Core...
case InitializationStrategies.DropCreateDatabaseIfModelChanges:
throw new NotImplementedException("Le mode DropCreateDatabaseIfModelChanges ne peut pas encore exister sous Entity Framework Core");
}
}
}
}

@ -1,43 +0,0 @@
// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
// marc.chevaldonne.free.fr
//
// Module : Morceau.cs
// Author : Marc Chevaldonné
// Creation date : 2016-10-19
//
// ========================================================================
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace ex_042_008_EF_CF_One_to_Many
{
/// <summary>
/// Morceau est une classe POCO, i.e. Plain Old CLR Object.
/// Elle a une relation 1-many avec la classe Morceau via la propriété Album.
/// La clé primaire est générée lors de l'insertion en table.
/// </summary>
[Table("Morceaux")]
public class Morceau
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UniqueId
{
get; set;
}
public string Titre
{
get; set;
}
public virtual Album Album
{
get; set;
}
}
}

@ -1,87 +0,0 @@
// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
// marc.chevaldonne.free.fr
//
// Module : Program.cs
// Author : Marc Chevaldonné
// Creation date : 2016-10-19
//
// ========================================================================
using Microsoft.EntityFrameworkCore;
using System;
using static System.Console;
namespace ex_042_008_EF_CF_One_to_Many
{
class Program
{
/// <summary>
/// Cet exemple montre comment construire une relation 1-many dans la base de données en utilisant les conventions de nommage Entity Framework.
///
/// on utilise les données stubbées de DbContextInitializer
/// On affiche les Albums et les Morceaux.
/// Constatez que les identifiants sont bien les mêmes à cause de la relation 1-many.
///
/// Si vous ouvrez la base de données (via l'explorateur d'objets SQL Server), vous pourrez constater que la table Morceaux
/// contient une colonne Album_UniqueId qui permet d'assurer la relation 1-many.
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
OutputEncoding = System.Text.Encoding.UTF8;
try
{
//création du DbContext et injection de la dépendance à MyStubDataInitializationStrategy
using (AlbumDBEntities db = new AlbumDBEntities())
{
//choix de la stratégie et remplissage avec des données stubbées
DbContextInitializer.Seed(db);
}
using (AlbumDBEntities db = new AlbumDBEntities())
{
WriteLine("Albums : ");
foreach (var a in db.Albums.Include(a => a.Morceaux))
{
WriteLine($"\t{a.UniqueId}: {a.Titre} (sorti le : {a.DateDeSortie.ToString("d")})");
foreach (var m in a.Morceaux)
{
WriteLine($"\t\t{m.Titre}");
}
}
WriteLine();
WriteLine("Morceaux :");
foreach (var m in db.Morceaux)
{
WriteLine($"\t{m.UniqueId}: {m.Titre} (album : {m.Album.Titre})");
}
}
}
catch (NotImplementedException exception)
{
WriteLine(exception.Message);
}
catch (Exception)
{
WriteLine("Votre base de données n'existe pas. C'est peut-être la première fois que vous exécutez cet exemple.");
WriteLine("Pour créer la base de données, suivez les instructions suivantes (que vous retrouvez en commentaires dans la classe Program) :");
WriteLine("Pour créer la base, ouvrez un invite de commandes et placez-vous dans le dossier de ce projet, ou bien,");
WriteLine("- dans Visual Studio ouvrez la Console du Gestionnaire de package (Outils -> Gestionnaire de package NuGet -> Console du Gestionnaire de package),");
WriteLine("- dans cette Console, vous devriez être dans le dossier de la solution, déplacez-vous dans celui du projet (ici : cd ex_042_008_EF_CF_One_to_Many)");
WriteLine("- tapez : dotnet restore (pour restaurer les packages .NET Core)");
WriteLine("- tapez : dotnet ef migrations add MyFirstMigration");
WriteLine(" note : vous pourrez détruire le dossier Migrations une fois la base créée");
WriteLine("- tapez : dotnet ef database update");
WriteLine(" Ceci génère la base de données en utilisant la migration, et en particulier votre classe DBContext et vos classes POCO.");
WriteLine("\nDans cet exemple, une base de données SQLServer est créée et en particulier la table Nounours.mdf");
}
ReadLine();
}
}
}

@ -1,21 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<AssemblyName>ex_042_008_EF_CF_One_to_Many</AssemblyName>
<OutputType>Exe</OutputType>
<PackageId>ex_042_008_EF_CF_One_to_Many</PackageId>
<RuntimeFrameworkVersion>3.0.1</RuntimeFrameworkVersion>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
Loading…
Cancel
Save