|
|
|
@ -14,8 +14,8 @@ namespace ex_042_012_EF_CF_Dictionary
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class NounoursDBEntities : DbContext
|
|
|
|
|
{
|
|
|
|
|
public virtual DbSet<NounoursEx> NounoursSet { get; set; }
|
|
|
|
|
public virtual DbSet<LitEx> LitsSet { get; set; }
|
|
|
|
|
public virtual DbSet<NounoursEntity> NounoursSet { get; set; }
|
|
|
|
|
public virtual DbSet<LitEntity> LitsSet { get; set; }
|
|
|
|
|
public virtual DbSet<Score> ScoresSet { get; set; }
|
|
|
|
|
|
|
|
|
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
|
|
|
@ -27,42 +27,42 @@ namespace ex_042_012_EF_CF_Dictionary
|
|
|
|
|
/// méthode appelée lors de la création du modèle.
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="modelBuilder"></param>
|
|
|
|
|
//protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
|
|
|
//{
|
|
|
|
|
// //création de la table TableNounours
|
|
|
|
|
// modelBuilder.Entity<Nounours>().ToTable("Nounours"); //nom de la table
|
|
|
|
|
// modelBuilder.Entity<Nounours>().HasKey(n => n.UniqueId); //définition de la clé primaire
|
|
|
|
|
// modelBuilder.Entity<Nounours>().Property(n => n.UniqueId);
|
|
|
|
|
// modelBuilder.Entity<Nounours>().Property(n => n.Nom).IsRequired()
|
|
|
|
|
// .HasMaxLength(256); //définition de la colonne Nom
|
|
|
|
|
// modelBuilder.Entity<Nounours>().Property(n => n.DateDeNaissance).HasColumnName("Naissance"); //changement du nom de la colonne Naissance
|
|
|
|
|
// modelBuilder.Entity<Nounours>().Property<Guid>("ForeignKey");
|
|
|
|
|
// modelBuilder.Entity<Nounours>().Property<Score>("Score");
|
|
|
|
|
// //note : la colonne NbPoils n'est pas changée : utilisation des conventions EF
|
|
|
|
|
|
|
|
|
|
// //création de la table "Lits"
|
|
|
|
|
// modelBuilder.Entity<Lit>().ToTable("Lits"); // nom de la table
|
|
|
|
|
// modelBuilder.Entity<Lit>().HasKey(c => c.UniqueId); //définition de la clé primaire
|
|
|
|
|
// modelBuilder.Entity<Lit>().Property(c => c.UniqueId)
|
|
|
|
|
// .ValueGeneratedOnAdd();
|
|
|
|
|
// modelBuilder.Entity<Lit>().Property<IEnumerable<Score>>("ScoresList");
|
|
|
|
|
// //note : la colonne LastModified n'est pas touchée : utilisation des conventions EF
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// //on précise qu'il y a une relation entre Score et Nounours
|
|
|
|
|
// modelBuilder.Entity<Score>() //l'entité Nounours...
|
|
|
|
|
// .HasOne("Nounours") //a une propriété obligatoire Carnet...
|
|
|
|
|
// .WithOne("Score") //reliée à la propriété Owner du Carnet...
|
|
|
|
|
// .HasForeignKey("Nounours", "ForeignKey");//dont la propriété UniqueId est une Foreign Key
|
|
|
|
|
// //remplace la ForeignKey
|
|
|
|
|
|
|
|
|
|
// modelBuilder.Entity<Lit>()
|
|
|
|
|
// .HasMany("ScoresList")
|
|
|
|
|
// .WithOne("Lit")
|
|
|
|
|
// .HasForeignKey("UniqueId");
|
|
|
|
|
|
|
|
|
|
// base.OnModelCreating(modelBuilder);
|
|
|
|
|
//}
|
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
|
|
|
{
|
|
|
|
|
//création de la table TableNounours
|
|
|
|
|
modelBuilder.Entity<NounoursEntity>().ToTable("Nounours"); //nom de la table
|
|
|
|
|
modelBuilder.Entity<NounoursEntity>().HasKey(n => n.UniqueId); //définition de la clé primaire
|
|
|
|
|
modelBuilder.Entity<NounoursEntity>().Property(n => n.UniqueId);
|
|
|
|
|
modelBuilder.Entity<NounoursEntity>().Property(n => n.Nom).IsRequired()
|
|
|
|
|
.HasMaxLength(256); //définition de la colonne Nom
|
|
|
|
|
modelBuilder.Entity<NounoursEntity>().Property(n => n.DateDeNaissance).HasColumnName("Naissance"); //changement du nom de la colonne Naissance
|
|
|
|
|
//modelBuilder.Entity<NounoursEntity>().Property<Guid>("ForeignKey");
|
|
|
|
|
//modelBuilder.Entity<Nounours>().Property<Score>("Score");
|
|
|
|
|
//note : la colonne NbPoils n'est pas changée : utilisation des conventions EF
|
|
|
|
|
|
|
|
|
|
// //création de la table "Lits"
|
|
|
|
|
// modelBuilder.Entity<Lit>().ToTable("Lits"); // nom de la table
|
|
|
|
|
// modelBuilder.Entity<Lit>().HasKey(c => c.UniqueId); //définition de la clé primaire
|
|
|
|
|
// modelBuilder.Entity<Lit>().Property(c => c.UniqueId)
|
|
|
|
|
// .ValueGeneratedOnAdd();
|
|
|
|
|
// modelBuilder.Entity<Lit>().Property<IEnumerable<Score>>("ScoresList");
|
|
|
|
|
// //note : la colonne LastModified n'est pas touchée : utilisation des conventions EF
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//on précise qu'il y a une relation entre Score et Nounours
|
|
|
|
|
modelBuilder.Entity<Score>() //l'entité Nounours...
|
|
|
|
|
.HasOne(s => s.Key) //a une propriété obligatoire Carnet...
|
|
|
|
|
.WithOne(ne => ne.Score) //reliée à la propriété Owner du Carnet...
|
|
|
|
|
.HasForeignKey<NounoursEntity>(ne => ne.UniqueId);//dont la propriété UniqueId est une Foreign Key
|
|
|
|
|
//remplace la ForeignKey
|
|
|
|
|
|
|
|
|
|
modelBuilder.Entity<LitEntity>()
|
|
|
|
|
.HasMany("mScores")
|
|
|
|
|
.WithOne("Lit")
|
|
|
|
|
.HasForeignKey("UniqueId");
|
|
|
|
|
|
|
|
|
|
base.OnModelCreating(modelBuilder);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// permet de récupérer les données rentrées en base en les projetant dans les types utilisés pour le Model.
|
|
|
|
@ -70,39 +70,39 @@ namespace ex_042_012_EF_CF_Dictionary
|
|
|
|
|
/// <param name="lits">les lits rentrés en base</param>
|
|
|
|
|
/// <param name="nounours">les nounours rentrés en base</param>
|
|
|
|
|
/// <returns>true si la récupération est réussie, false sinon</returns>
|
|
|
|
|
public bool GetAll(out IEnumerable<Lit> lits, out IEnumerable<INounours> nounours)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
// récupère la collection de NounoursEx contenus dans la base et les projette en collection de Nounours
|
|
|
|
|
nounours = NounoursSet.ToList();//.Select(nEx => nEx.Nounours);
|
|
|
|
|
//récupère la collection de LitEx contenus dans la base et les projette en collection de Lit
|
|
|
|
|
lits = LitsSet.ToList().Select(lEx => lEx.Lit);
|
|
|
|
|
|
|
|
|
|
//parcourt la collection des scores contenus en base...
|
|
|
|
|
foreach (Score score in ScoresSet)
|
|
|
|
|
{
|
|
|
|
|
//...pour chaque score ...
|
|
|
|
|
//... trouve le lit concerné par ce score...
|
|
|
|
|
Lit leLit = lits.Single(l => l.Propriétaire == score.Lit.Propriétaire);
|
|
|
|
|
//...trouve le nounours concerné par ce score...
|
|
|
|
|
INounours leNounours = nounours.Single(n => n.Equals(score.Key));
|
|
|
|
|
//... met à jour le dictionnaire dans l'instance de Lit
|
|
|
|
|
leLit[leNounours] = score.Value;
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
Debug.WriteLine(e.Message);
|
|
|
|
|
lits = null;
|
|
|
|
|
nounours = null;
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//public bool GetAll(out IEnumerable<ILit> lits, out IEnumerable<INounours> nounours)
|
|
|
|
|
//{
|
|
|
|
|
// try
|
|
|
|
|
// {
|
|
|
|
|
// // récupère la collection de NounoursEx contenus dans la base et les projette en collection de Nounours
|
|
|
|
|
// nounours = NounoursSet.ToList();//.Select(nEx => nEx.Nounours);
|
|
|
|
|
// //récupère la collection de LitEx contenus dans la base et les projette en collection de Lit
|
|
|
|
|
// lits = LitsSet.ToList();
|
|
|
|
|
|
|
|
|
|
// //parcourt la collection des scores contenus en base...
|
|
|
|
|
// foreach (Score score in ScoresSet)
|
|
|
|
|
// {
|
|
|
|
|
// //...pour chaque score ...
|
|
|
|
|
// //... trouve le lit concerné par ce score...
|
|
|
|
|
// ILit leLit = lits.Single(l => l.Propriétaire == score.Lit.Propriétaire);
|
|
|
|
|
// //...trouve le nounours concerné par ce score...
|
|
|
|
|
// INounours leNounours = nounours.Single(n => n.Equals(score.Key));
|
|
|
|
|
// //... met à jour le dictionnaire dans l'instance de Lit
|
|
|
|
|
// leLit[leNounours] = score.Value;
|
|
|
|
|
// }
|
|
|
|
|
// return true;
|
|
|
|
|
// }
|
|
|
|
|
// catch (Exception e)
|
|
|
|
|
// {
|
|
|
|
|
// Debug.WriteLine(e.Message);
|
|
|
|
|
// lits = null;
|
|
|
|
|
// nounours = null;
|
|
|
|
|
// return false;
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
NounoursEx[] lesNounoursEx;
|
|
|
|
|
LitEx[] lesLitsEx;
|
|
|
|
|
//INounours[] lesNounours;
|
|
|
|
|
//ILit[] lesLits;
|
|
|
|
|
List<Score> lesScores = new List<Score>();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -111,47 +111,47 @@ namespace ex_042_012_EF_CF_Dictionary
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="lesLits"></param>
|
|
|
|
|
/// <param name="lesNounours"></param>
|
|
|
|
|
public void AddAll(IEnumerable<Lit> lesLits, IEnumerable<Nounours> lesNounours)
|
|
|
|
|
public void AddAll(IEnumerable<LitEntity> lesLits, IEnumerable<NounoursEntity> lesNounours)
|
|
|
|
|
{
|
|
|
|
|
//projection des données dans les types NounoursEx, LitEx et Scores pour permettre d'utiliser EntityFramework pour l'insertion en base
|
|
|
|
|
lesNounoursEx = lesNounours.Select(n => new NounoursEx(n)).ToArray();
|
|
|
|
|
lesLitsEx = lesLits.Select(l => new LitEx { Lit = l }).ToArray();
|
|
|
|
|
// //projection des données dans les types NounoursEx, LitEx et Scores pour permettre d'utiliser EntityFramework pour l'insertion en base
|
|
|
|
|
// //lesNounoursEx = lesNounours.Select(n => new NounoursEx(n)).ToArray();
|
|
|
|
|
// //lesLitsEx = lesLits.Select(l => new LitEx { Lit = l }).ToArray();
|
|
|
|
|
|
|
|
|
|
//met à jour la collection de scores
|
|
|
|
|
foreach (var litEx in lesLitsEx)
|
|
|
|
|
{
|
|
|
|
|
UpdateScores(litEx);
|
|
|
|
|
}
|
|
|
|
|
// //met à jour la collection de scores
|
|
|
|
|
// foreach (var litEx in lesLitsEx)
|
|
|
|
|
// {
|
|
|
|
|
// UpdateScores(litEx);
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
//met à jour les tables
|
|
|
|
|
NounoursSet.AddRange(lesNounoursEx);
|
|
|
|
|
LitsSet.AddRange(lesLitsEx);
|
|
|
|
|
NounoursSet.AddRange(lesNounours);
|
|
|
|
|
LitsSet.AddRange(lesLits);
|
|
|
|
|
ScoresSet.AddRange(lesScores);
|
|
|
|
|
|
|
|
|
|
SaveChanges();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private INounoursEqualityComparer NounoursEqComparer { get; set; } = new INounoursEqualityComparer();
|
|
|
|
|
//private INounoursEqualityComparer NounoursEqComparer { get; set; } = new INounoursEqualityComparer();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// transforme les dictionnaires en collection de scores
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="litEx"></param>
|
|
|
|
|
private void UpdateScores(LitEx litEx)
|
|
|
|
|
{
|
|
|
|
|
foreach (var kvp in litEx.Lit.Scores)
|
|
|
|
|
{
|
|
|
|
|
NounoursEx nounoursEx = lesNounoursEx.Single(nEx => NounoursEqComparer.Equals(nEx, kvp.Key));
|
|
|
|
|
Score score = new Score()
|
|
|
|
|
{
|
|
|
|
|
Key = nounoursEx,
|
|
|
|
|
Value = kvp.Value,
|
|
|
|
|
Lit = litEx
|
|
|
|
|
};
|
|
|
|
|
lesScores.Add(score);
|
|
|
|
|
litEx.Scores.Add(score);
|
|
|
|
|
nounoursEx.Score = score;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/// <param name="lit"></param>
|
|
|
|
|
//private void UpdateScores(ILit lit)
|
|
|
|
|
//{
|
|
|
|
|
// foreach (var kvp in lit.Scores)
|
|
|
|
|
// {
|
|
|
|
|
// NounoursEx nounoursEx = lesNounoursEx.Single(nEx => NounoursEqComparer.Equals(nEx, kvp.Key));
|
|
|
|
|
// Score score = new Score()
|
|
|
|
|
// {
|
|
|
|
|
// Key = nounoursEx,
|
|
|
|
|
// Value = kvp.Value,
|
|
|
|
|
// Lit = litEx
|
|
|
|
|
// };
|
|
|
|
|
// lesScores.Add(score);
|
|
|
|
|
// litEx.Scores.Add(score);
|
|
|
|
|
// nounoursEx.Score = score;
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|