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 :

jointure 1-* opération CRUD


Sujet :

ASP.NET MVC

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut jointure 1-* opération CRUD
    bonjour,
    Je suis actuellement en stage dans une entreprise qui a créer son propre CMS sous asp.net webfrom et qui veut le refaire sous asp.net MVC2 avec entity Framwork, je doit donc me charger du développement de la nouvelle application.J'utilise Visual Studio 2008 sp1 version 3.5,et je code en C#. N'ayant jamais fait d'asp.net MVC2 avant j'ai suivi les tuto sur le sujet et notamment celui-ci :http://msdn.microsoft.com/fr-fr/asp.net/dd627541.aspx. J'ai donc généré le model avec entity à partir de la base de données existante. Je doit pour l'instant réaliser une maquette de la future application, j'ai donc isolé les trois table suivantes:
    Pièce jointe 76583

    Sur la base de donnée sqlserver qui contient la base de données qui ma permit de générer mon model entity, il y a dans la table WsgPage les champs idWsgThemeWsgPage, idWsgPageRegroupementWsgPage, et idWsgMasterpageWsgPage qui sont les clé étrangère correspondant au trois autre tables (voir pièce jointe). Mais dans le model ces trois champ on sauté car il sont passé en propriété de navigation. Ces trois champs n'existe donc pas dans mon model et je ne vois pas comment mettre a jour la table page. Voici ma vue :
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MaquetteNouvelleSolution.Models.wsgPage>" %>
     
     
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
     
        <h2>Modifier la page</h2>
     
        <% using (Html.BeginForm())
           {%>
            <%= Html.ValidationSummary(true)%>
     
            <fieldset>
                <legend>Fields</legend>
     
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.idWsgPage)%>
                </div>
                <div class="editor-field">
                    <%= Html.TextBoxFor(model => model.idWsgPage)%>
                    <%= Html.ValidationMessageFor(model => model.idWsgPage)%>
                </div>
     
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.nomWsgPage)%>
                </div>
                <div class="editor-field">
                    <%= Html.TextBoxFor(model => model.nomWsgPage)%>
                    <%= Html.ValidationMessageFor(model => model.nomWsgPage)%>
                </div>
     
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.defautWsgPage)%>
                </div>
                <div class="editor-field">
                    <%= Html.CheckBoxFor(model => model.defautWsgPage)%>
                    <%= Html.ValidationMessageFor(model => model.defautWsgPage)%>
                </div>
     
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.visibleWsgPage)%>
                </div>
                <div class="editor-field">
                    <%= Html.CheckBoxFor(model => model.visibleWsgPage)%>
                    <%= Html.ValidationMessageFor(model => model.visibleWsgPage)%>
                </div>
     
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.verrouWsgPage)%>
                </div>
                <div class="editor-field">
                    <%= Html.CheckBoxFor(model => model.verrouWsgPage)%>
                    <%= Html.ValidationMessageFor(model => model.verrouWsgPage)%>
                </div>
     
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.positionWsgPage)%>
                </div>
                <div class="editor-field">
                    <%= Html.TextBoxFor(model => model.positionWsgPage)%>
                    <%= Html.ValidationMessageFor(model => model.positionWsgPage)%>
                </div>
     
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.idParentWsgPage)%>
                </div>
                <div class="editor-field">
                    <%= Html.TextBoxFor(model => model.idParentWsgPage)%>
                    <%= Html.ValidationMessageFor(model => model.idParentWsgPage)%>
                </div>
     
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.idRedirectionWsgPage)%>
                </div>
                <div class="editor-field">
                    <%= Html.TextBoxFor(model => model.idRedirectionWsgPage)%>
                    <%= Html.ValidationMessageFor(model => model.idRedirectionWsgPage)%>
                </div>
     
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.niveauWsgPage)%>
                </div>
                <div class="editor-field">
                    <%= Html.TextBoxFor(model => model.niveauWsgPage)%>
                    <%= Html.ValidationMessageFor(model => model.niveauWsgPage)%>
                </div>
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.wsgTheme.idWsgTheme)%>
                </div>
                <div class="editor-field">
                    <%= Html.TextBoxFor(model => model.wsgTheme.idWsgTheme)%>
                    <%= Html.ValidationMessageFor(model => model.wsgTheme.idWsgTheme)%>
                </div>
                <div class="editor-label">
                    <%= Html.LabelFor(model => model.wsgMasterpage.idWsgMasterpage)%>
                </div>
                <div class="editor-field">
                    <%= Html.TextBoxFor(model => model.wsgMasterpage.idWsgMasterpage)%>
                    <%= Html.ValidationMessageFor(model => model.wsgMasterpage.idWsgMasterpage)%>
                </div>
                            <div class="editor-label">
                    <%= Html.LabelFor(model => model.wsgPageRegroupement.idWsgPageRegroupement)%>
                </div>
                <div class="editor-field">
                    <%= Html.TextBoxFor(model => model.wsgPageRegroupement.idWsgPageRegroupement)%>
                    <%= Html.ValidationMessageFor(model => model.wsgPageRegroupement.idWsgPageRegroupement)%>
                </div>
                <p>
                    <input type="submit" value="Save" />
                </p>
            </fieldset>
     
        <% } %>
     
        <div>
            <%= Html.ActionLink("Back to List", "Index") %>
        </div>
     
    </asp:Content>
    Du fait que j'ai suivit le tutoriel sité plus haut j'ai créé une couche data(gestion des données), une couche service(gestion du métier et des validateur) et donc au niveau de mon controller j'ai un simple appel a une fonction editPage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Edit(wsgPage wsgPageToEdit, int idwsgTheme, int idwsgMasterpage, int idWsgPageRegroupement)
            {
                if (_service.EditPage(wsgPageToEdit, idwsgTheme, idwsgMasterpage, idWsgPageRegroupement))
                    return RedirectToAction("Index");
                return View();
            }
    Dans ma couche data j'ai le code suivant pour la fonction editPage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public wsgPage EditPage(wsgPage wsgPageToEdit, int idwsgTheme, int idwsgMasterpage, int idWsgPageRegroupement)
            {
     
                var pageOrigine = GetPage(wsgPageToEdit.idWsgPage);
                pageOrigine.wsgTheme = GetTheme(idwsgTheme);
                pageOrigine.wsgMasterpage = GetMasterpage(idwsgMasterpage);
                pageOrigine.wsgPageRegroupement = GetPageRegroupement(idWsgPageRegroupement);
                    _entite.ApplyPropertyChanges(pageOrigine.EntityKey.EntitySetName, wsgPageToEdit);
                    _entite.SaveChanges();
                    return wsgPageToEdit;
            }
    et dans la couche service:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public bool EditPage(wsgPage wsgPageToEdit, int idwsgTheme, int idwsgMasterpage, int idWsgPageRegroupement)
            {
                if (!ValidationWsgPage(wsgPageToEdit))
                    return false;
                try
                {
                    _donnee.EditPage(wsgPageToEdit, idwsgTheme, idwsgMasterpage, idWsgPageRegroupement);
                }
                catch
                {
                    return false;
                }
                return true;
            }
    J'arrive a modifier les champs faisant partie de l'entite wsgPage mais pas les trois derniers champs qui correspondent aux "clés étrangères".
    Cela fait deux jours que je cherche sur les forums français et anglais mais je n'est rien trouvé de satisfaisant.
    J'ai vu sur le forum une question qui aurai pu répondre à ma question ou en tout cas m'apporter une solution (suivre le lien): http://www.developpez.net/forums/d10...3/#post5858598 mais dans la réponse donné par Feez pour la deuxième solution lors de la jointure qu'il prosose je n'est pas accèes a la clé étrangère de la table employe dans ce cas la:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from emp in db.EMPLOYE
    join dpt in db.DEPARTEMENT on emp.DPTID equals dpt.DPTID
    select new EmployeViewModel { Nom = emp.Nom ,..., Tel = emp.Tel, Departement = dpt.DPTDES };
    J'espère avoir été clair.
    Merci d'avance pour le temps passé sur ma question.
    Cordialement.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 27
    Par défaut
    Bonjour,

    Le lien spécifié pour la pièce jointe n'est pas valide.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    désolé il m'avais semblé que c'était bon...
    voici donc l'image :Nom : extrai BD gestionPage.JPG
Affichages : 143
Taille : 64,8 Ko

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 27
    Par défaut
    Dans l'entité WsgPage de ton modèle, tu peux créer les propriétés nécessaires et les mapper aux colonnes correspondantes de ta table.

    Avant d'aller plus loin (Controller/View), je pense que tu devrais travailler ton modèle pour qu'il colle parfaitement à ta base de donnée. ça résoudra (t'évitera) beaucoup de problèmes.

    Le sous-forum Accès aux données est plus amène à t'apporter des réponses en ce qui concerne EF.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2010
    Messages : 119
    Par défaut
    Merci pour la rapidité de ta réponse. En effet il me parait judicieux de retravailler le model avant de ce lancer dans le développement même de l'application. J'ai essayé de modifier mon entité WsgPage en rajoutant les trois propriétés scalaires correspondantes à mes clés étrangère et en les mappant aux tables correspondantes mais cela me génère des erreurs lié à EF... Je vais donc allez voir le forum correspondant et me renseigner plus en détail sur EF car j'ai juste survolé le sujet.
    cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jointure qui ne renvoie pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 12
    Dernier message: 19/07/2024, 09h33
  2. Opération CRUD avec Entity Framework
    Par benny-blanco dans le forum VB.NET
    Réponses: 11
    Dernier message: 18/02/2012, 20h30
  3. opérations CRUD sur plusieurs entity
    Par coold dans le forum JPA
    Réponses: 3
    Dernier message: 15/01/2010, 22h13
  4. opération en XSL
    Par rastapopulos dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 12/03/2003, 22h39
  5. Jointures INNER et jointures classiques ???
    Par UbiK dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/09/2002, 10h29

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