IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

nom d'une BDD non respecté -creation via un DbContext et in Initializer


Sujet :

ASP.NET MVC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Database.SetInitializer<E_bibliothequeContext>(new e_bibliotheque_Initializer());
    -web.config en ajoutant lasection connectionString
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.



    Bien cordialement.

    new_wave

  2. #2
    Membre éclairé Avatar de BRUNO71
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2007
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 507
    Par défaut
    Bonjour,
    Plusieurs points à vérifier pour résoudre les problèmes :

    1. Le nom de la table en base de données
    Le nom de la table est dérivé du nom de la classe par défaut.
    Pour forcer le nom de la table à être Auteurs, vous pouvez utiliser l'attribut Table dans votre modèle VM_Auteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    namespace e_bibliotheque_MVC.Models
    {
        [Table("Auteurs")]
        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; }
        }
    }
    2. Ajout d'un nouvel auteur dans la méthode Seed
    Assurez-vous que la base de données est bien régénérée lorsque le modèle change.
    Parfois, les modifications de Seed peuvent ne pas être appliquées si la base de données n'est pas supprimée et recréée.
    Pour vérifier, essayez d'ajouter manuellement un nouvel auteur dans la méthode Seed et voyez si le changement est appliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    var ListeAuteurs = new List<VM_Auteur>
    {
        new VM_Auteur()
        {
            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)
        },
        new VM_Auteur()
        {
            Prenom = "Nouveau",
            Nom = "Auteur",
            DateDeNaissance = new DateTime(2000, 01, 01)
        }
    };
     
    ListeAuteurs.ForEach(a => context.Auteurs.Add(a));
    context.SaveChanges();
    3. Configuration de l'initialisation de la base de données
    Assurez-vous que l'initialisation est bien configurée dans le fichier Global.asax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    protected void Application_Start()
    {
        Database.SetInitializer(new e_bibliotheque_Initializer());
        // Autres configurations...
    }
    4. Vérification des messages d'erreur

    Vérifiez les logs et les messages d'erreur qui pourraient indiquer un problème lors de la mise à jour de la base de données.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    988
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 988
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/02/2017, 16h09
  2. [AC-2007] Interdire la connexion avec une BDD non chiffrée
    Par Triton972 dans le forum Sécurité
    Réponses: 6
    Dernier message: 20/06/2010, 16h05
  3. Réponses: 2
    Dernier message: 11/12/2008, 16h05
  4. Héberger une BDD et avoir accès via n'importe quel PC ?
    Par pepito62 dans le forum Hébergement
    Réponses: 8
    Dernier message: 25/10/2008, 10h50
  5. [Conception] Création d'un Mailing List via une BDD
    Par Matmax dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 12/04/2006, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo