Моделирование взаимосвязи многих ко многим в ASP.NET MVC с использованием LINQ для SQL

StackOverflow https://stackoverflow.com/questions/2145034

  •  23-09-2019
  •  | 
  •  

Вопрос

Я читал и смотрел видео о MVC, и я начинаю немного запутаться. Простые учебники слишком просты, и они, кажется, включают только одну таблицу базы данных. Уопти Ду!

Дополнительные учебники предполагают, что присутствует много знаний, и у меня возникают проблемы с этим. Не говоря уже о том, что есть 15 способов смоделировать вашу базу данных, и никто не хочет объяснить, почему они делают это так или таким образом.

Итак, я ищу простой учебник или объяснение того, через какой процесс вы пройдете, чтобы разработать простое приложение CRUD, которое включает в себя отношения между многими ко многим, объясненные ниже. Возможно, я не предоставил достаточно информации, поэтому не стесняйтесь запросить обновления.

Обновления:Мне было бы интересно увидеть решение LINQ для SQL.

Я прошел через PDF Nerddinner, и моя модель должна немного отличаться от его. Я хочу много ко многим отношениям с едой и ингредиентами. Он просто использует 1-ory с ужином и RSVP. Кроме того, он никогда не показывает, как он прикреплял RSVP к своей модели ужина. По сути, это проблема, с которой я сталкиваюсь. Почему моя модель еды не содержит списка ингредиентов? У меня есть подходящие иностранные ключи. Я не уверен, где и как бы я его настроил, чтобы я мог получить доступ к ингредиентам через модель еды, если я хотел распечатать их в виде деталей или что -то в этом роде.

Блюда

  • Идентификатор
  • Заголовок
  • Описание

Ингредиенты

  • Идентификатор
  • Имя

Блюда

  • Id_meal
  • Id_ingredient
Это было полезно?

Решение

Надеюсь, вы нашли что-то, но для других там, кто все еще может поискать, взглянуть на этот:

https://github.com/workshirt/wscokhmarksview

Другие советы

У меня есть много примеров такого типа отношений в моем текущем проекте. Я использую 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. Стоит денег, если вы хотите попасть в это.

Amazon Link

Вы не получите все на серебряной тарелке. Вам придется пройти через hell of wtf самим собой.

Это похоже на меня и Ruby на Rails - каждый раз, когда я вижу образец фрагмента или образец приложения - это кажется супер пуревым и аккуратным. Но - потому что я никогда не создавал ничего самого, у меня не было никаких идей с тем, что даже начинать.

Так что просто пройдите некоторые книги а также Образцы приложений. Анкет Тогда - создайте что -нибудь. Это чувство (с тем, что начать, как структурировать и т. Д.) Скоро исчезнет.

Позже - не забывайте о второй крайности - чувствуя, что вы знаете все, что вы должны знать. :)


И да - вы не предоставили достаточно информации. Есть различные пути, чтобы идти. Я верю - вы не захотите услышать подходы к продвинутому доменному дизайну. Вы не хотите увидеть SQL рядом с HTML Markup. Только вы знаете 'контекст«И может решить, что необходимо, хорошо, а что нет.

Вы можете использовать представления, чтобы увидеть элементы в списке или библиотеке, которые наиболее важны для вас или соответствуют определенной цели. Например, вы можете создавать представления файлов в библиотеке, которая применяется к конкретному отделу или элементам в списке, созданном конкретным человеком. Просмотры доступны для списка или библиотеки, в которой вы их создаете.

Каждый список или библиотека имеет хотя бы один вид. В браузере вы можете изменить эти представления и создавать новые представления. Например, список задач включает несколько просмотров, таких как все задачи и мои задачи. Вы можете изменить эти представления, изменив, как элементы в списке отсортированы. Или вы можете создать новый вид, который показывает только эти задачи, которые являются неполными.

Для вашего требования вы можете перейти -> модифицировать просмотр -> в стиле -> Вы можете выбрать стили, которые вы хотите.

Посмотрите на ссылку ниже для получения дополнительной информации о стилях в списке / представлении библиотеки

Создание, изменение или удаление представления списка или библиотеки

В приведенной выше ссылки, прокрутите вниз и найдите раздел «Стиль» в разделе «Настройки для представлений», и это может помочь вам сделать ваше требование.

Я считаю, что у Стивена Уолтера есть несколько отличных уроков для ASP.NET MVC версии 1, предполагая, что вы работаете с первой версией, поскольку версия 2 еще не выпущена (RC в настоящее время). Первый рабочий урок начинается здесь И вы должны быть в состоянии найти остальное оттуда. У него также есть много хороших советов, если вы ищете его блог на этом сайте.

Также большинство этих уроков охватывают VB и C#, если это важно для вас.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top