Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用LINQ to SQL在ASP.NET MVC中建模多对多关系_Asp.net Mvc_Data Modeling - Fatal编程技术网

Asp.net mvc 使用LINQ to SQL在ASP.NET MVC中建模多对多关系

Asp.net mvc 使用LINQ to SQL在ASP.NET MVC中建模多对多关系,asp.net-mvc,data-modeling,Asp.net Mvc,Data Modeling,我一直在阅读和观看有关MVC的视频,我开始有点困惑了。简单的教程太简单了,它们似乎只涉及一个数据库表。哇 高级教程假设有很多知识,我很难理解。更不用说,有15种方法可以对数据库建模,没有人愿意解释他们为什么这样或那样做 因此,我正在寻找一个简单的教程或解释,说明设计一个涉及多对多关系的简单CRUD应用程序的过程,如下所述。我可能没有提供足够的信息,所以请随时请求更新 更新: 我想看看Linq到Sql的解决方案 我看了nerddinner的PDF,我的模型肯定和他的有点不同。我想与我的食物和配料建

我一直在阅读和观看有关MVC的视频,我开始有点困惑了。简单的教程太简单了,它们似乎只涉及一个数据库表。哇

高级教程假设有很多知识,我很难理解。更不用说,有15种方法可以对数据库建模,没有人愿意解释他们为什么这样或那样做

因此,我正在寻找一个简单的教程或解释,说明设计一个涉及多对多关系的简单CRUD应用程序的过程,如下所述。我可能没有提供足够的信息,所以请随时请求更新

更新: 我想看看Linq到Sql的解决方案

我看了nerddinner的PDF,我的模型肯定和他的有点不同。我想与我的食物和配料建立多对多的关系。他只是在晚餐和RSVP中使用一对多。此外,他从未展示如何将RSVP附加到他的晚餐模型上。这基本上就是我面临的问题。为什么我的膳食模型不包含配料清单?我有合适的外键。我不确定我将在哪里或如何设置它,以便我可以通过膳食模型访问配料,如果我想在“详细信息”视图或其他什么上打印它们

  • 身份证
  • 头衔
  • 描述
成分
  • 身份证
  • 名字
膳食材料
  • 便餐
  • Id_成分
    • 我建议你退房。有一个完整的免费章节,介绍了一些实际应用程序的设置

      然后看一看成品


      这是一个非常简单的MVC应用程序,如果你得到了这本书,你可以从概念到最终产品都遵循它。

      我发现Steven Walther为asp.net MVC版本1提供了一些很棒的教程,假设你使用的是第一个版本,因为版本2还没有发布(RC目前)。第一个工作教程,你应该能够找到从那里休息。如果你在他的博客上搜索,他也有很多好的建议


      如果VB和C对您很重要的话,本教程中的大部分内容都涉及VB和C。

      我强烈推荐Steve Sanderson的“Pro ASP.NET MVC框架”。这是迄今为止我见过的最好的ASP.NETMVC指南,在我看来,它比MSoft团队的Wrox手册要好得多。如果你想进去的话,这笔钱是物有所值的


      你不会把所有东西都放在银盘上。你必须亲自经历wtf的地狱

      就像我和RubyonRails一样——每次我看到示例代码片段或示例应用程序时——它看起来超级简单而整洁。但是——因为我自己从来没有真正创造过任何东西,我甚至不知道该从什么开始

      所以-只要通过和。然后-创造一些东西。这种感觉(从什么开始,如何构建等等)很快就会消失

      稍后-不要忘记第二个极端-感觉你知道你必须知道的一切。:)



      是的,你没有提供足够的信息。有很多路可走。我相信——你不会想听先进的领域驱动设计方法的。您都不希望看到html标记旁边的Sql。只有你知道“”,并且可以决定什么是必要的,什么是好的,什么不是。

      在我当前的项目中,我有很多这种关系的例子。我正在使用MVC1和LINQtoSQL。我当时经历的挫折和你现在经历的完全一样。最大的障碍是接受LINQtoSQL不直接管理多对多关系这一事实,但要理解它不需要直接管理多对多关系才能获得所需的信息

      让我们从CRUD中的R开始,因为它是演示需要做什么的最简单方法。现在,我建议创建一个强类型视图模型,以简化聚合视图数据的任务,并简化将用餐数据分配到详细视图的过程:

      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; }
          }
      }
      
      如前所述,LINQtoSQL不直接支持多对多关系,这就是为什么您无法直接从中看到配料实体。但是,如控制器操作方法所示,您可以从膳食实体访问关联实体(膳食成分)。从关联实体中,您可以访问配料实体以获取配料列表。视图的外观如下所示:

      <%@ 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>
      
      
      
      成分:


      | | |

      如果您的数据库模式正确地设置了所需的外键关系,那么这种方法应该可以为您提供所需的结果。

      我找到的唯一解决方案是使用PLINQ。据我所知,它并不完美

      我手动使用“PLINQ方法”:


      不过我同意,我讨厌一遍又一遍地写那些代码。这不是一个“干净”的解决方案。

      我想你已经看过书呆子晚餐教程系列了吧?是的,我已经在asp.net/mvcAlso上查看了其中的大多数。请查看scott gu的博客。请注意,MVC作为一个框架并不关心您使用什么业务逻辑和数据层。如果您对BL和DB层感兴趣,您应该研究LINQ,以便将您的模型和BL以及实体框架(如果您对仅MSFT的解决方案感兴趣)或NHibernate(如果您对其他开源解决方案感兴趣)连接起来对于BL和DB之间的ORM映射,我最终切换到了NHibernate,与Linq to Sql相比,我更喜欢它。我确实观看了NerddineralRight的创建,显然视频与PDF不同!PDF文件更有用。我很困惑。提问者在我的答案上加上记号,然后再加上记号
      <%@ 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>