LINQからSQLを使用して、ASP.NET MVCで多対多数の関係をモデル化する
-
23-09-2019 - |
質問
私はMVCに関するビデオを読んで見てきましたが、少し混乱し始めています。簡単なチュートリアルはあまりにも単純で、単一のデータベーステーブルのみが含まれているようです。おっとドゥー!
高度なチュートリアルでは、多くの知識が存在すると仮定しており、私はそれらをフォローするのに苦労しています。言うまでもなく、データベースをモデル化する15の方法があり、なぜ彼らがこのようにそれを行うのかを説明したくない人はいません。
だから、以下で説明する多くの関係を含むシンプルなCRUDアプリケーションを設計するためにあなたがどのようなプロセスを実行するかについての簡単なチュートリアルまたは説明を探しています。私は十分な情報を提供していないかもしれないので、更新をリクエストしてください。
更新:LINQからSQLソリューションを見ることに興味があります。
私はNerddinner PDFを通過しましたが、私のモデルは彼とは少し違うものでなければなりません。食事や材料との多目的な関係が欲しいです。彼は夕食とRSVPで1対多数を使用しています。また、彼は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-to-SQLは多くの多くの関係を直接サポートしていないため、食事から直接成分のエンティティを見ることができません。ただし、コントローラーアクションメソッドに示されているように、食事エンティティからAssociation Entity(Meals-ingRedients)にアクセスできます。 Association Entityから、成分エンティティにアクセスして成分のリストを取得できます。ビューは次のようになります:
<%@ 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 on Railsのようなものです - サンプルのスニペットやサンプルアプリケーションを見るたびに - それは非常にシンプルできちんとしたようです。しかし - 私は実際に自分で何かを作成したことがないので、何が始まるかについてのアイデアを得ませんでした。
だから - ただ通過してください 何冊かの本 と サンプルアプリケーション. 。次に - 何かを作成します。この感覚(何を始め、どのように構成するかなど)はすぐに消えます。
後で - セカンドエクストリームを忘れないでください - あなたが知っている必要があるすべてを知っていると感じてください。 :)
そしてええ - あなたは十分な情報を提供しませんでした。通り抜けるさまざまな道があります。私は信じています - あなたは高度なドメイン主導のデザインのアプローチを聞きたくないでしょう。どちらもHTMLマークアップのすぐ隣にSQLを見たくありません。あなただけが知っている」コンテキスト'そして、何が必要か、良い、何がそうでないかを決めることができます。
ビューを使って、あなたにとって最も重要なリストまたはライブラリ内のアイテムを見ることができます。たとえば、特定の部門に適用されるライブラリまたは特定の人によって作成されたリスト内の項目にファイルのビューを作成できます。ビューは、それらを作成したリストまたはライブラリに使用できます。
各リストまたはライブラリには少なくとも1つのビューがあります。ブラウザでは、これらのビューを変更して新しいビューを作成できます。たとえば、タスクリストには、すべてのタスクやマイタスクなど、いくつかのビューが含まれています。リスト内の項目がどのようにソートされているかを変更することでこれらのビューを変更できます。あるいは、不完全なそのタスクのみを示す新しいビューを作成することもできます。
あなたの要件のために、あなたはgoto - > modify view - >「スタイルの下」 - >あなたが望むスタイルを選択することができます。
リスト/ライブラリビューのスタイルの詳細については、下のリンクを見てください。
上記のリンクで、「ビューの設定」の下にある「スタイル」という名前のセクションを見つけて見つけて、必要な要件を実行するのに役立ちます。
Steven Waltherには、ASP.NET MVCバージョン1の優れたチュートリアルがいくつかあります。バージョン2がまだリリースされていないため(現在)、最初のバージョンを使用していると仮定しています。最初の作業チュートリアル ここから始まります そして、あなたはそこから残りを見つけることができるはずです。彼はまた、そのサイトで彼のブログを検索する場合、多くの良いヒントを持っています。
また、このチュートリアルのほとんどは、VBとC#をカバーしています。