nom d'une BDD non respecté -creation via un DbContext et in Initializer
Bonjour,
J'ai cree les,classes VM_Auteur, E_bibliothequeContext et e_bibliothequeInitializer pour initialiser une BDD d'une application Asp.MVC
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace e_bibliotheque_MVC.Models
{
public class VM_Auteur
{
[Key]
public int Id_Auteur { get; set; }
public string Prenom { get; set; }
public string Nom { get; set; }
public DateTime DateDeNaissance { get; set; }
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace e_bibliotheque_MVC.Models
{
public class E_bibliothequeContext:DbContext
{
public E_bibliothequeContext() : base("name = e_BibliothequeDB") { }
//la table Auteurs en BDD sera constituée d'un ensemble d'objets VM_Auteur
public DbSet<VM_Auteur>Auteurs { get; set; }
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace e_bibliotheque_MVC.Models
{
//la classe DropCreateDatabaseIfModelChanges: si le model est modifié(on ajoute un produit, on le modifie, on le supprime)
//la base de données est supprimée et recréée
public class e_bibliotheque_Initializer : DropCreateDatabaseIfModelChanges<E_bibliothequeContext>
{
protected override void Seed(E_bibliothequeContext context)
{
base.Seed(context);
var ListeAuteurs = new List<VM_Auteur>
{
new VM_Auteur()
{
// Id_Auteur=1,
Prenom = "Alexandra",
Nom = "Lapierre",
DateDeNaissance = new DateTime(1955, 11, 14)
},
new VM_Auteur()
{
Prenom = "Amélie",
Nom = "Nothomb",
DateDeNaissance = new DateTime(1966, 07, 09)
},
new VM_Auteur()
{
Prenom = "Gaelle",
Nom = "Josse",
DateDeNaissance = new DateTime(1960, 09,22)
}
};
ListeAuteurs.ForEach(a =>context.Auteurs.Add(a));
context.SaveChanges();
}//fin de mehode Seed
}//fin de classe
}//fin de Namespace |
J'ai également modifié les fichiers
-global asax en ajoutant cette instruction
Code:
1 2
|
Database.SetInitializer<E_bibliothequeContext>(new e_bibliotheque_Initializer()); |
-web.config en ajoutant lasection connectionString
Code:
1 2 3 4 5 6 7 8 9
|
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<!--Data Source = nom du serveur-->
<add name="e_bibliothequeDB" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=e_BibliothequeDB;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings> |
Cependant au lancement de l'appli, le nom de la table de la base de données est VM_auteur et non Auteurs comme demandé dans la classe E_bibliothequeContext.
De plus, si j'initialize la BDD avec deux elements , les auteurs apparaissent bien mais si j'ajoute un objet VM_Auteur à la ListeAuteur de la classe Initializer, le nouvel élément ne s'ajoute pas en BDD.
Merci beaucoup à vous de m'aider à comprendre ce dysfonctionnement.
:help:
Bien cordialement.
new_wave
modification du nom d'une table de BDD
Bonjour et merci beaucoup de vos réponses .
Reponse 1 : je vais procéder à cette modification
Réponse 2: à la creation de la classe, l'implementation de DropCreateDatabaseIfModelChanges<E_bibliothequeContext>
doit normalement permettre de recréer la BDD si on modifie le modele de données.
Or il est possible que le fait d'ajouter un auteur via la methode Seed n'est pas considéré comme une modification du modele de données mais simplement un ajout de données .
C'est peut être la raison de ce non ajout d'un nouvel;auteur via l'intialiser.
Merci de me dire ce que vous en pensez.
Code:
1 2 3 4
|
public class e_bibliotheque_Initializer : DropCreateDatabaseIfModelChanges<E_bibliothequeContext>
{ |
Pour ce qui est de la réponse 3, cette instruction est déjà réalisée dans la méthode application_Start du fichier Global.asax
Reponse 4 ; merci pour l'idée très utile en effet.
Bien cordialement.