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 :

ASP.NET MVC4 et héritage


Sujet :

ASP.NET MVC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut ASP.NET MVC4 et héritage
    Bonjour,

    Je suis entrain de revoir .NET et donc MVC4 et je suis confronté à un soucis avec l'héritage et ce que génère entity framework.
    J'ai donc une classe abstraite "Person" et une classe héritant de Person nommée "User".
    J'ai donc créé mon context:
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity.ModelConfiguration.Conventions;
    using System.Data.Entity;
     
     
    namespace erp.Models
    {
        public class ErpContext : DbContext
        {
            public DbSet<Person> Persons { get; set; }
     
     
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
     
                modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            }
     
        }
    }
    J'ai donc créé le controller qui s'appuie sur le modèle User et le context plus haut.
    Quand je regarde, il me crée bien la table Person avec toutes les propriétés de Person et User.
    Voici le controller qui me génère:
    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
    119
    120
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Entity;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using erp.Models;
     
    namespace erp.Controllers
    {
        public class UserController : Controller
        {
            private ErpContext db = new ErpContext();
     
            //
            // GET: /User/
     
            public ActionResult Index()
            {
                return View(db.Persons.ToList());
            }
     
            //
            // GET: /User/Details/5
     
            public ActionResult Details(int id = 0)
            {
                User user = (User)db.Persons.Find(id);
                if (user == null)
                {
                    return HttpNotFound();
                }
                return View(user);
            }
     
            //
            // GET: /User/Create
     
            public ActionResult Create()
            {
                return View();
            }
     
            //
            // POST: /User/Create
     
            [HttpPost]
            public ActionResult Create(User user)
            {
                if (ModelState.IsValid)
                {
                    db.Persons.Add(user);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
     
                return View(user);
            }
     
            //
            // GET: /User/Edit/5
     
            public ActionResult Edit(int id = 0)
            {
                User user = (User)db.Persons.Find(id);
                if (user == null)
                {
                    return HttpNotFound();
                }
                return View(user);
            }
     
            //
            // POST: /User/Edit/5
     
            [HttpPost]
            public ActionResult Edit(User user)
            {
                if (ModelState.IsValid)
                {
                    db.Entry(user).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(user);
            }
     
            //
            // GET: /User/Delete/5
     
            public ActionResult Delete(int id = 0)
            {
                User user = (User)db.Persons.Find(id);
                if (user == null)
                {
                    return HttpNotFound();
                }
                return View(user);
            }
     
            //
            // POST: /User/Delete/5
     
            [HttpPost, ActionName("Delete")]
            public ActionResult DeleteConfirmed(int id)
            {
                User user = (User)db.Persons.Find(id);
                db.Persons.Remove(user);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
     
            protected override void Dispose(bool disposing)
            {
                db.Dispose();
                base.Dispose(disposing);
            }
        }
    }
    J'ai déjà du transtyper en User mais lorsque j'atteinds l'url:
    http://localhost:52991/user
    J'ai cette exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Détails de l'exception: System.InvalidOperationException: L'élément de modèle passé dans le dictionnaire est de type « System.Collections.Generic.List`1[erp.Models.Person] », mais ce dictionnaire requiert un élément de modèle de type « System.Collections.Generic.IEnumerable`1[erp.Models.User] ».
    Si quelqu'un pouvait m'éclairer sur l'erreur que j'ai faite
    Merci

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2013
    Messages : 21
    Points : 37
    Points
    37
    Par défaut
    Salut,

    Pour moi, il faut aussi que tu mettes ton User dans la définition du context

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class ErpContext : DbContext
        {
            public DbSet<Person> Persons { get; set; }
            public DbSet<User> User { get; set; }
    Et que tu utilises directement User

  3. #3
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Bonjour,
    Au niveau de la vue "User/Index", vous devez remplacer "Personne" par "User" dans la première ligne

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    Merci de vos propositions, je testerai ça ce soir

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 306
    Points : 76
    Points
    76
    Par défaut
    J'ai réussi à faire tourner l'affaire en ajoutant le User dans le context ainsi qu'en modifiant dans le controller la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //
            // GET: /User/
     
            public ActionResult Index()
            {
                return View(db.Persons.ToList());
            }
    par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //
            // GET: /User/
     
            public ActionResult Index()
            {
                return View(db.Users.ToList());
            }
    Mais alors à quoi sert le context Person?
    Et donc si je dois encore ajouter une classe héritant de Person, je dois aussi ajouter le context.


    Merci de vos éclaircissements

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

Discussions similaires

  1. [Débutant] ASP.net MVC4 Setup Oracle MemberShip Provider
    Par chlebta*tsotsi dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 16/04/2014, 00h30
  2. [Débutant] Morceler doc pdf ASP.net MVC4
    Par Loic7800 dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 28/04/2013, 16h51
  3. ASP.Net & MVC4
    Par Emna2013 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 26/01/2013, 15h59
  4. meilleur architecture projet asp.net mvc4
    Par mvc_dev dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 30/12/2012, 16h47
  5. ASP.NET MVC4 (Migrations)
    Par medzen dans le forum ASP.NET
    Réponses: 0
    Dernier message: 18/12/2012, 20h49

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