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

C# Discussion :

modification des champs crées automatiquement par un initilalizer de DBcontext


Sujet :

C#

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
    991
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 991
    Par défaut modification des champs crées automatiquement par un initilalizer de DBcontext
    J'ai crée un initializer de context de BDD . qui initiliaze une BDd de livres avec des objets livres.



    Par defaut, il crée une table VM_Livres en BDD avec des champs dont le nom ne me convenait pas .

    J'ai modifié ces noms de champs mais à présent, lorsque je veux recuperer les données de la table VM_Livres, au niveau du controller LivreController, j'obtiens ce message en fichier joint .



    Je vous envoie également une capture ecran des structures des table VM_Livre et VM_Auteur.

    Merci beaucoup à vous de m'aider à retrouver l'origine du pb pour le corriger.

    Bien amicalement.

    new_wave
    Images attachées Images attachées   

  2. #2
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 668
    Par défaut
    Citation Envoyé par new_wave Voir le message
    J'ai modifié ces noms de champs
    Ben du coup oui l'erreur est limpide, la requête ne match plus le nom des champs. Il suffit de mettre à jour la requête (si c'est possible), ou alors de re-renommer les champs.

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 991
    Par défaut mise à jour des champs
    Bonjour de ta merci de ta réponse.

    Y a t-il un script que je pourrais modifier pour que les noms des champs soient ceux que j'ai donnés à la table Livre.

    Sinon, comment modifier la requete car elle se crée dynamiquement.

    Merci encore de ton aide.

    Bien cordialement.

    new_wave

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 013
    Par défaut
    Pour donner un nom différent aux colonnes issues de ton modèle objet, il faut utiliser l'attribut [Column("ColumnNameInTheDB")].

    https://learn.microsoft.com/en-us/ef...%2Cwithout-nrt

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 991
    Par défaut noms des colonnes
    Merci beaucoup de ta réponse que je m'empresse de mettre en application.

    Par ailleurs, le code de la classe VM_Livre est celui-ci

    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
     
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel.DataAnnotations; 
     
    namespace e_bibliotheque_MVC.Models
    {
        public class VM_Livre
        {
            [Key]
            public int Id_Livre { get; set; }
     
            public string Title { get; set; }
            public DateTime ParutionDate { get; set; }
     
     
            public VM_Auteur auteur { get; set; }
     
            public VM_Rayon rayon { get; set; }
     
            public byte[] livreImage { get; set; }
            public string livreImageType { get; set; }
     
            public override string ToString()
            {
                return "{Title} {ParutionDate.ToString() {Rayon}";
     
            }     
     
     
     
     
        }
    }
    Si , au dessus de VM_auteur auteur , j'écris [Column(" auteur_Id_Auteur ")] qui correspond uniquement à l'identifiant d'un VM_Auteur, comment devrais je créer un nouveau VM_Livre , dans l'initializer, qui nécessite que je renseigne toutes les données d'un VM_Auteur.

    Autre point, comment permettre l'affichage, dans une vue, des infos d'un VM_Auteur d'un VM_Livre, si je n'ai qu'un champ auteur_Id_Auteur dans la table VM_Auteur.

    Une requete de jointure vers la table VM_auteur est certainement nécessaire pour cela.

    Pour l'instant, au niveau de l'affichage , je ne recupère rien des données d'un VM_Auteur, comme tu peux le voir en capt ecran jointe

    Je suis un peu perdue...

    Merci beaucoup encore de ton aide.


    Bien cordialement.

    new_wave
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 013
    Par défaut
    Tu confonds navigation et clé étrangère.

    L'attribut [Column(" auteur_Id_Auteur ")] doit être mis sur la propriété correspondant à l'Id de l'auteur dans l'objet VM_Auteur lui même.

    La propriété public VM_Auteur auteur { get; set; } n'est pas une colonne, c'est une propriété de navigation.
    Tu peux t'en servir pour obtenir ou définir les données de l'auteur depuis le livre.
    Mais puisque ce n'est pas une clé étrangère mais une navigation, y mettre un attribut de colonne n'a pas de sens.

    Tu peux également créer une colonne de clé étrangère dont le nom doit être auteurId pour être reconnu par EF.
    Cela permettra en création de n'avoir à passer que l'Id de l'auteur.

    Voici un lien qui explique tout cela.
    https://learn.microsoft.com/fr-fr/as...aspnetcore-8.0
    Et en particulier la partie nommée Propriétés de clé étrangère et de navigation.

    Un livre ne peut pas exister sans auteur.
    Donc lorsque tu créé un livre, tu dois normalement déjà avoir un auteur.
    Cela implique soit de créer l'auteur s'il n'existe pas, soit de le lire dans la source de données.
    Dans les deux cas, tu dois garder une trace soit de son Id, soit de l'entité complète.
    Pour l'affecter, soit tu remplit Auteur avec l'entité complète, soit tu remplis AuteurId avec son id (évite de faire les deux).

Discussions similaires

  1. SugarCRM : Modification des champs par défault
    Par AnthOO42 dans le forum SugarCRM
    Réponses: 1
    Dernier message: 26/07/2012, 14h12
  2. Réponses: 3
    Dernier message: 14/03/2012, 18h01
  3. Réponses: 0
    Dernier message: 07/08/2011, 01h42
  4. Réponses: 2
    Dernier message: 05/02/2007, 18h09
  5. [débutant] Ordre des champs de saisie par la touche tab
    Par almisuifre dans le forum C++Builder
    Réponses: 10
    Dernier message: 03/03/2005, 20h45

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