La modélisation d'un grand nombre à plusieurs dans ASP.NET MVC avec LINQ to SQL
-
23-09-2019 - |
Question
J'ai lu et regarder des vidéos sur MVC et je commence à être un peu confus. Les tutoriels simples sont beaucoup trop simples et ils semblent impliquer uniquement une table de base de données unique. doo Whoopty!
Les tutoriels avancés suppose beaucoup de connaissances est présent et j'ai du mal à suivre ceux-ci. Sans parler, il y a 15 façons de modéliser votre base de données et personne ne veut expliquer pourquoi ils le font de cette façon ou de cette façon.
Alors, je suis à la recherche d'un tutoriel simple ou une explication de ce processus, vous passeriez pour concevoir une application simple CRUD qui implique un grand nombre à plusieurs, expliqué ci-dessous. Je ne peux pas avoir fourni suffisamment d'informations pour se sentir libre de demander des mises à jour.
Mises à jour: Je serais intéressé à voir une solution LINQ to SQL.
Je suis passé par le PDF NerdDinner et mon modèle doit être un peu différent que le sien. Je veux un grand nombre à plusieurs avec mon repas et mes ingrédients. Il utilise seulement 1 à plusieurs avec son dîner et RSVPs. , Il ne montre jamais aussi comment il a attaché les RSVPs à son modèle de dîner. Ceci est essentiellement le problème que je vais avoir. Pourquoi est-ce que mon modèle de repas ne contient pas une liste des ingrédients? J'ai les clés étrangères appropriées en place. Je ne sais pas où ni comment je le configurer de sorte que je puisse accéder aux ingrédients à travers le modèle de repas si je voulais les imprimer sur les détails voir ou quelque chose.
Repas
- Id
- Titre
- Description de
Ingrédients
- Id
- Nom
Repas-Ingrédients
- Id_Meal
- Id_Ingredient
Autres conseils
J'ai beaucoup d'exemples de ce type de relation dans mon projet en cours. J'utilise MVC 1 et LINQ to SQL. Je suis passé par la même frustration alors que vous rencontrez maintenant. Le plus grand obstacle accepte le fait que LINQ to SQL ne gère pas directement beaucoup à plusieurs relations, mais comprendre qu'il n'a pas besoin d'afin d'obtenir les informations dont vous avez besoin.
Commençons par le R dans CRUD, car il est la meilleure façon de montrer ce qui doit être fait. Maintenant, à ce stade, je recommande de créer un modèle de vue fortement typée, pour faciliter la tâche de regrouper vos données de vue et de simplifier l'affectation des données de repas à la vue détaillée:
public class MealDetailsViewModel
{
public int Id_Meal { get; set; }
public string Title { get; set; }
public string Description { get; set; }
private List<Ingredient> _Ingredients = new List<Ingredient>();
public List<Ingredient> Ingredients
{
get { return _Ingredients; }
set { _Ingredients = value; }
}
}
Pour récupérer un repas et sa liste d'ingrédients, voici la méthode du contrôleur:
public ActionResult Details (int mealID)
{
Meal result = DataContext.Meals
.Where(a => a.Id_Meal == mealID)
.SingleOrDefault();
MealDetailsViewModel viewModel = new MealDetailsViewModel
{
Id_Meal = result.Id,
Title = result.Title,
Description = result.Description,
Ingredients = result.Meals-Ingredients
.Where(a => a.Id_Meal == mealID)
.Select(a => a.Ingredient)
.ToList()
};
return View(viewModel);
}
Comme indiqué précédemment, LINQ to SQL ne supporte pas directement un grand nombre à plusieurs relations, ce qui est la raison pour laquelle vous ne pouvez pas voir l'entité Ingrédients directement à partir de repas. Cependant, comme illustré dans la méthode d'action du contrôleur, vous pouvez accéder à l'entité d'association (repas-ingrédients) de l'entité repas. De l'entité d'association, vous pouvez accéder à l'entité Ingrédients pour obtenir la liste des ingrédients. La vue ressemblerait à quelque chose comme ceci:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="ViewPage<MealDetailsViewModel>" %>
<asp:Content ID="mainMealDetails" ContentPlaceHolderID="MainContent" runat="server">
<h2><%= Model.Title %></h2>
<h3><%= Model.Description %></h3>
<br />
<p>Ingredients:</p>
<ul>
<% foreach(Ingredient item in Model.Ingredients)
{ %>
<li><%= item.Name %></li>
<% } %>
</ul>
<br />
<%= Html.ActionLink("Update", "Edit", new { id = Model.Meal_ID }) %> |
<%= Html.ActionLink("Add Ingredient", "IngredientCreate", new{ id = Model.Meal_ID }) %> |
<%= Html.ActionLink("Delete", "Delete", new { id = Model.Meal_ID }) %> |
<%= Html.ActionLink("Back to Menu List", "Index") %>
</asp.Content>
Si votre schéma de base de données est correctement configuré avec les relations de clés étrangères dont vous avez besoin, cette approche devrait vous donner le résultat que vous êtes à la recherche.
Je recommande fortement 'Pro Framework ASP.NET MVC' de Steve Sanderson. Il est de loin le meilleur guide ASP.NET MVC Je l'ai vu, et à mon avis, beaucoup mieux que le livre Wrox par l'équipe MSoft. Il vaut bien l'argent si vous voulez entrer.
Vous n'obtiendrez pas tout sur la plaque d'argent. Vous devrez passer par vous-même hell of wtf
.
Il est comme avec moi et Ruby on Rails - chaque fois que je vois extrait de l'échantillon ou de l'application de l'échantillon - il semble super duper simple et soigné. Mais - parce que je ne l'ai jamais fait quoi que ce soit créé moi-même, je suis pas d'idées avec ce même pour commencer
.- juste passer par quelques livres et sample . Puis - créer quelque chose. Ce sentiment (avec quoi commencer, comment structurer etc.) disparaîtra très bientôt.
Par la suite - ne pas oublier deuxième extrême - le sentiment que vous savez tout ce que vous devez savoir. :)
Et oui - vous n'avez pas fourni suffisamment d'informations. Il y a plusieurs chemins pour passer. Je crois - vous ne voudrez pas entendre les approches de conception axée sur des domaines avancés. Ni vous voulez voir Sql juste à côté de balisage HTML. Seulement, vous savez « le contexte » et peut décider de ce qui est nécessaire, bon et ce qui est pas.
Je vous suggère de vérifier Professional ASP.NET MVC 1.0 . Il y a un chapitre gratuit toute disponible qui marche à travers une partie de l'installation pour une application réelle.
Et jetez un oeil à http://www.nerddinner.com/ pour voir le produit fini .
Ceci est une application MVC très simple et si vous obtenez le livre, vous pouvez le suivre du concept au produit fini.
Je trouve Steven Walther a quelques didacticiels pour la version asp.net MVC 1, en supposant que vous travaillez avec la première version en tant que version 2 est pas encore sorti (RC actuellement). Le premier tutoriel de travail