Моделирование взаимосвязи многих ко многим в ASP.NET MVC с использованием LINQ для SQL
-
23-09-2019 - |
Вопрос
Я читал и смотрел видео о MVC, и я начинаю немного запутаться. Простые учебники слишком просты, и они, кажется, включают только одну таблицу базы данных. Уопти Ду!
Дополнительные учебники предполагают, что присутствует много знаний, и у меня возникают проблемы с этим. Не говоря уже о том, что есть 15 способов смоделировать вашу базу данных, и никто не хочет объяснить, почему они делают это так или таким образом.
Итак, я ищу простой учебник или объяснение того, через какой процесс вы пройдете, чтобы разработать простое приложение CRUD, которое включает в себя отношения между многими ко многим, объясненные ниже. Возможно, я не предоставил достаточно информации, поэтому не стесняйтесь запросить обновления.
Обновления:Мне было бы интересно увидеть решение LINQ для SQL.
Я прошел через PDF Nerddinner, и моя модель должна немного отличаться от его. Я хочу много ко многим отношениям с едой и ингредиентами. Он просто использует 1-ory с ужином и RSVP. Кроме того, он никогда не показывает, как он прикреплял RSVP к своей модели ужина. По сути, это проблема, с которой я сталкиваюсь. Почему моя модель еды не содержит списка ингредиентов? У меня есть подходящие иностранные ключи. Я не уверен, где и как бы я его настроил, чтобы я мог получить доступ к ингредиентам через модель еды, если я хотел распечатать их в виде деталей или что -то в этом роде.
Блюда
- Идентификатор
- Заголовок
- Описание
Ингредиенты
- Идентификатор
- Имя
Блюда
- Id_meal
- Id_ingredient
Решение
Надеюсь, вы нашли что-то, но для других там, кто все еще может поискать, взглянуть на этот:
Другие советы
У меня есть много примеров такого типа отношений в моем текущем проекте. Я использую MVC 1 и LINQ-TO-SQL. Я пережил то же самое разочарование, как и вы сейчас. Самым большим препятствием является принятие того факта, что LINQ-TO-SQL напрямую не управляет отношениями многих ко многим, но понимание того, что она не должна получить необходимую вам информацию.
Давайте начнем с R в Crud, так как это самый простой способ продемонстрировать, что нужно сделать. Теперь, на данный момент я бы порекомендовал создать модель просмотра с надежным типом, просто чтобы облегчить задачу агрегирования данных вашего представления и упростить задание данных о приеме пищи в представление подробностей:
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; }
}
}
Чтобы получить еду и ее список ингредиентов, вот метод контроллера:
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);
}
Как указывалось ранее, LINQ-TO-SQL напрямую не поддерживает отношения для многих ко многим, поэтому вы не можете видеть сущность ингредиентов непосредственно из еды. Однако, как показано в методе действия контроллера, вы можете получить доступ к объекте ассоциации (питания) из объекта приема пищи. Из организации ассоциации вы можете получить доступ к сущности ингредиентов, чтобы получить список ингредиентов. Представление будет выглядеть примерно так:
<%@ 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>
Если ваша схема базы данных правильно настроена с необходимыми вам отношениями иностранного ключа, этот подход должен дать вам результат, который вы ищете.
Я настоятельно рекомендую Steeve Sanderson's 'Pro ASP.NET MVC Framework'. Это, безусловно, лучшее руководство ASP.NET MVC, которое я видел, и, по моему мнению, намного лучше, чем книга Wrox Team. Стоит денег, если вы хотите попасть в это.
Вы не получите все на серебряной тарелке. Вам придется пройти через hell of wtf
самим собой.
Это похоже на меня и Ruby на Rails - каждый раз, когда я вижу образец фрагмента или образец приложения - это кажется супер пуревым и аккуратным. Но - потому что я никогда не создавал ничего самого, у меня не было никаких идей с тем, что даже начинать.
Так что просто пройдите некоторые книги а также Образцы приложений. Анкет Тогда - создайте что -нибудь. Это чувство (с тем, что начать, как структурировать и т. Д.) Скоро исчезнет.
Позже - не забывайте о второй крайности - чувствуя, что вы знаете все, что вы должны знать. :)
И да - вы не предоставили достаточно информации. Есть различные пути, чтобы идти. Я верю - вы не захотите услышать подходы к продвинутому доменному дизайну. Вы не хотите увидеть SQL рядом с HTML Markup. Только вы знаете 'контекст«И может решить, что необходимо, хорошо, а что нет.
Вы можете использовать представления, чтобы увидеть элементы в списке или библиотеке, которые наиболее важны для вас или соответствуют определенной цели. Например, вы можете создавать представления файлов в библиотеке, которая применяется к конкретному отделу или элементам в списке, созданном конкретным человеком. Просмотры доступны для списка или библиотеки, в которой вы их создаете.
Каждый список или библиотека имеет хотя бы один вид. В браузере вы можете изменить эти представления и создавать новые представления. Например, список задач включает несколько просмотров, таких как все задачи и мои задачи. Вы можете изменить эти представления, изменив, как элементы в списке отсортированы. Или вы можете создать новый вид, который показывает только эти задачи, которые являются неполными.
Для вашего требования вы можете перейти -> модифицировать просмотр -> в стиле -> Вы можете выбрать стили, которые вы хотите.
Посмотрите на ссылку ниже для получения дополнительной информации о стилях в списке / представлении библиотеки
Создание, изменение или удаление представления списка или библиотеки
В приведенной выше ссылки, прокрутите вниз и найдите раздел «Стиль» в разделе «Настройки для представлений», и это может помочь вам сделать ваше требование.
Я считаю, что у Стивена Уолтера есть несколько отличных уроков для ASP.NET MVC версии 1, предполагая, что вы работаете с первой версией, поскольку версия 2 еще не выпущена (RC в настоящее время). Первый рабочий урок начинается здесь И вы должны быть в состоянии найти остальное оттуда. У него также есть много хороших советов, если вы ищете его блог на этом сайте.
Также большинство этих уроков охватывают VB и C#, если это важно для вас.