2 pièce(s) jointe(s)
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
Recuperation dans une vue d'une valeur de property
Bonjour et merci pour ton retour.
J'ai lu avec attention une bonne partie du document en lien.
J'ai donc modifié ma classe VM_Livre en y ajoutant un property Id_Auteur et une property Id_rayon qui seront des clés étrangères en BDD.
A présent, au niveau de la vue d'affichage des livres, je souhaite récuperer, par ex, le nom de l'auteur dont le Id_auteur==1 en BDD
Comment, au niveau de ma boucle, récuperer cela via une requete link to sql.
Je me suis un peu pris la tête avec cela et tourne en rond.
Merci beaucoup de ton aide.
Bien cordialement.
new_wave
Code:
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
|
@model IEnumerable<e_bibliotheque_MVC.Models.VM_Livre>
@{
ViewBag.Title = "ListerLivres";
}
<h2>ListerLivres</h2>
<table class="table table-striped table-hover ">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.Title)</th>
<th>@Html.DisplayNameFor(model => model.ParutionDate)</th>
<th>@Html.DisplayNameFor(model => model.auteur.Nom) </th>
<th>@Html.DisplayNameFor(model => model.auteur.Prenom)</th>
<th>@Html.DisplayNameFor(model => model.rayon.NomRayon)</th>
</tr>
</thead>
<!--parcours de la table VM_Livre avec foreach- -->
@foreach (var livre in Model)
{
<tr>
<td>@Html.DisplayFor(model => livre.Title)</td>
<td>@Html.DisplayFor(model => livre.ParutionDate)</td>
//ici cela ne convient pas -nécessité d'une requete link
<td>@Html.DisplayFor(model => livre.auteur.Nom)</td>
<td>@Html.DisplayFor(model => livre.auteur.Prenom)</td>
<td>@Html.DisplayFor(model => livre.rayon.NomRayon)</td>
</tr>
}
</table> |
1 pièce(s) jointe(s)
recuperation de données relatives
Bonjour,
Voici ce que j'ai essayé
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
namespace e_bibliotheque_MVC.Controllers
{
public class LivreController : Controller
{
E_bibliothequeContext context = new E_bibliothequeContext();
// GET: Livre
[HttpGet]
public ActionResult ListerLivres()
{
return View("ListerLivres", context.Livres.Include(VM_Livre=> VM_Livre.auteur.Nom).ToList());
} |
J'obtiens cette erreur au niveau de (VM_Livre=> VM_Livre.auteur.Nom)
Citation:
Impossible de convertir expression Lambda en type string car il ne s'agit pas d'un type délegué
1-suis je sur la bonne piste?
2-si oui, comment corriger cette erreur ?
3-n'ai je pas besoin d'ajouter une clause join pour obtenir le nom d'un VM_Auteur?
J'ai essayé autre chose avec l'erreur suivante (aussi capt ecran ci-jointe)
Citation:
$exception {"The entity or complex type 'e_bibliotheque_MVC.Models.VM_Livre' cannot be constructed in a LINQ to Entities query."} System.NotSupportedException
Code:
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
|
namespace e_bibliotheque_MVC.Controllers
{
public class LivreController : Controller
{
E_bibliothequeContext context = new E_bibliothequeContext();
// GET: Livre
[HttpGet]
public ActionResult ListerLivres()
{
IEnumerable<VM_Livre> Livres_avec_Auteur = (from l in context.Livres
join a in context.Auteurs on l.Id_Auteur equals a.Id_Auteur
select new VM_Livre
{
Id_Livre = l.Id_Livre,
Title = l.Title,
ParutionDate = l.ParutionDate,
Id_Auteur = l.Id_Auteur,
auteur = new VM_Auteur()
{
Prenom = a.Prenom,
Nom = a.Nom,
DateDeNaissance = a.DateDeNaissance,
auteurImage = a.auteurImage,
auteurImageType = a.auteurImageType
}
}).ToList();
return View("ListerLivres", Livres_avec_Auteur);
} |
Merci encore beaucoup de ton aide car je tatonne!
Bien cordialement.
new_wave
récuperation de données -entités reliées
Bonjour et merci de ces informations.
Une question : pour ce qui est de l'attribut de mappage ForeignKey, du fait que ma BDD est déjà bien construite avec les FK qui conviennent, ai je encore besoin de les préciser?
J'ai repris les exemples d'utilisation de Include() https://learn.microsoft.com/fr-fr/ef...ectedfrom=MSDN
Voici le code que j'ai écrit mais qui me renvoie cette erreur
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
E_bibliothequeContext context = new E_bibliothequeContext();
// GET: Livre
[HttpGet]
public ActionResult ListerLivres()
{
//return View("ListerLivres", context.Livres.ToList());
//Include porte sur les proprietes de navigation
var Livres_avec_Auteur = context.Livres.Include(li => li.auteur).ToList();
return View("ListerLivres", Livres_avec_Auteur);
} |
Voici l'erreur au niveau de var Livres_avec_Auteur = context.Livres.Include(li => li.auteur).ToList();
Citation:
Impossible de convertir expression Lambda en type string car il ne s'agit pas d'un type délegué
Faut il que la propriété de navigation VM_Auteur auteur soit une collection pour que cela fonctionne?
Y-a t-il besoin d'ajouter un attribut de mappage au niveau de la propriete auteur?
Merci encore beaucoup de me guider pour modifier ce qui a besoin de l'être .
Bien cordialement.
new_wave
récupération de données de plusieurs tables
Bonjour et MERCi!:merci:
En effet, il manquait le using System.Data.Entity et tout fonctionne nickel!!:D
Je vais cependant bien reprendre les conventions de nommage comme tu me l'as conseillé.
Je t'avoue, pour moi, j'ai franchis un pas dans la conception d'application MVC .
Je vais donc avancer avec les autres fonctionnalités (modifier, supprimer) et utiliser ces avancées.:)
Sans vouloir te déranger, comment aurais tu conçu les classes VM_Livre et VM_Auteur selon ta distinction modèle lié à la BDD / modèle lié à la Vue .
Tu me dis
Citation:
Et dans la mesure où tu as un problème de nommage, il faudra probablement remettre l'attribut [Column] également
.
Est ce que cela concerne propriete de navigation VM_Auteur auteur ou la propriete Id_Auteur ?
Merci encore beaucoup de ton aide très précieuse et de ton retour.
Bien cordialement.
:salut:
new_wave