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.