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:
J'ai donc créé le controller qui s'appuie sur le modèle User et le context plus haut.
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>(); } } }
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:
J'ai déjà du transtyper en User mais lorsque j'atteinds l'url:
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); } } }
http://localhost:52991/user
J'ai cette exception:
Si quelqu'un pouvait m'éclairer sur l'erreur que j'ai faite
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] ».
Merci
Partager