使用LINQ到SQL在ASP.NET MVC中建模多到许多关系
-
23-09-2019 - |
题
我一直在阅读和观看有关MVC的视频,并且开始感到有些困惑。简单的教程太简单了,它们似乎仅涉及一个数据库表。哇!
高级教程假设存在很多知识,并且我遇到了这些知识。更不用说,有15种方法可以对您的数据库进行建模,没有人想解释为什么他们以这种方式或那种方式这样做。
因此,我正在寻找一个简单的教程或解释您将要经历哪些过程来设计一个简单的CRUD应用程序,该应用程序涉及多到许多关系的关系。我可能没有提供足够的信息,因此请随时请求更新。
更新:我有兴趣看到LINQ到SQL解决方案。
我经历了Nerddinner PDF,我的模型必须与他的模型有所不同。我想要与我的饭菜和食材之间的多一关系。他只是在晚餐和RSVP中使用一对一的人。另外,他从未展示过他如何将RSVP附加到晚餐模型上。这本质上是我遇到的问题。为什么我的餐模式不包含成分列表?我有适当的外国钥匙。我不确定在何处或如何设置它,以便如果我想在详细信息视图或其他内容上打印出餐模型,我可以通过餐模型访问成分。
餐
- ID
- 标题
- 描述
原料
- ID
- 姓名
餐点
- id_meal
- id_ingredient
解决方案
希望你找到一些东西,但对于那些可能仍然搜索的人来说,看看这个:
其他提示
我在当前项目中有许多这种类型的关系的例子。我正在使用MVC 1和LINQ-TO-SQL。与您现在所经历的那样,我经历了完全相同的挫败感。最大的障碍是接受这样一个事实,即Linq-to-SQL不能直接管理许多与众不同的关系,而是了解它不需要以获取所需的信息。
让我们从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; }
}
}
要检索一餐及其成分清单,以下是控制器方法:
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到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>
如果您的数据库模式与您需要的外键关系正确设置,则此方法应为您提供所需的结果。
我强烈推荐史蒂夫·桑德森(Steve Sanderson)的“ Pro ASP.NET MVC框架”。到目前为止,这是我见过的最好的ASP.NET MVC指南,在我看来,这比MSOFT团队的WROX书好得多。如果您想进入这笔钱,那么值得这笔钱。
您不会在银板上得到所有东西。你将不得不经历 hell of wtf
你自己。
就像我和Ruby一起使用Rails(每次我看到样品片段或样品应用程序时),这似乎是超级傻瓜简单而整洁的。但是 - 因为我自己从未真正创造过任何东西,所以我没有任何想法。
所以 - 只要经历 一些书 和 示例申请. 。然后 - 创建一些东西。这种感觉(从开始,如何结构等)很快就会消失。
稍后 - 不要忘记第二个极端 - 感觉自己知道所有必须知道的一切。 :)
是的 - 您没有提供足够的信息。有各种各样的路。我相信 - 您不想听到高级域驱动的设计方法。您都不想在HTML标记旁边看到SQL。只有你知道 '上下文'并可以决定什么是必要的,好的和什么不是。
您可以使用视图来查看对您或符合特定目的的列表或库中的项目。例如,您可以在库中创建文件的视图,该文件适用于特定部门或特定人创建的列表中的项目。您创建它们的列表或库的视图可用。
每个列表或库至少有一个视图。在浏览器中,您可以修改这些视图并创建新视图。例如,任务列表包含多个视图,例如所有任务和我的任务。您可以通过更改列表中的项目的排序方式来修改这些视图。或者您可以创建一个新视图,该视图仅显示不完整的任务。
为您的要求,您可以转到 - >修改视图 - >在样式下 - >您可以选择所需的样式。
看看下面的链接有关列表/库视图中样式的更多详细信息
在上面的链接中,向下滚动并在“视图设置”下,找到名为“样式”的部分,它可能会帮助您完成要求。
我发现Steven Walther拥有ASP.NET MVC版本1的一些出色教程,假设您正在使用第一个版本,因为版本2尚未发布(当前RC)。第一个工作教程 从这里开始 您应该能够从那里找到其余的。如果您在该网站上搜索他的博客,他也有很多好的技巧。
如果这对您很重要,那么大多数教程都涵盖了VB和C#。