Pertanyaan Memodelkan hubungan banyak-ke-banyak di ASP.NET MVC menggunakan LINQ to SQL


Saya telah membaca dan menonton video tentang MVC dan saya mulai sedikit bingung. Tutorial sederhana terlalu sederhana dan tampaknya hanya melibatkan satu tabel basis data. Whoopty doo!

Tutorial tingkat lanjut mengasumsikan banyak pengetahuan hadir dan saya kesulitan mengikutinya. Belum lagi, ada 15 cara untuk memodelkan database Anda dan tidak ada yang ingin menjelaskan mengapa mereka melakukannya dengan cara ini atau dengan cara itu.

Jadi, saya mencari tutorial atau penjelasan sederhana tentang proses apa yang akan Anda lakukan untuk merancang aplikasi CRUD sederhana yang melibatkan hubungan banyak-ke-banyak, dijelaskan di bawah ini. Saya mungkin tidak memberikan informasi yang cukup jadi jangan ragu untuk meminta pembaruan.

Pembaruan: Saya akan tertarik melihat solusi Linq To Sql.

Saya membaca PDF nerddinner dan model saya harus sedikit berbeda dari miliknya. Saya ingin hubungan banyak-ke-banyak dengan Meal dan Bahan-bahan saya. Dia hanya menggunakan 1-ke-banyak dengan Makan Malam dan RSVP-nya. Juga, ia tidak pernah menunjukkan bagaimana ia melekatkan RSVP pada model Makan Malamnya. Ini pada dasarnya adalah masalah yang saya hadapi. Mengapa model Meal saya tidak mengandung daftar Bahan? Saya memiliki kunci asing yang tepat di tempat. Saya tidak yakin di mana atau bagaimana saya akan mengaturnya sehingga saya dapat mengakses bahan melalui model Meal jika saya ingin mencetaknya pada tampilan detail atau sesuatu.

Makanan

  • ID
  • Judul
  • Deskripsi

Bahan

  • ID
  • Nama

Meals-Ingredients

  • ID_Meal
  • Id_Ingredient

5
2018-01-27 06:43


asal


Jawaban:


Satu-satunya solusi yang saya temukan adalah menggunakan PLINQ. Itu tidak sempurna sejauh yang aku tahu.

Saya menggunakan "metode PLINQ" secara manual: http://www.codeproject.com/KB/linq/linq-to-sql-many-to-many.aspx

Saya setuju meskipun, saya benci menulis semua kode itu lagi dan lagi. Ini bukan solusi "bersih".


2
2018-06-04 17:43



Saya memiliki banyak contoh dari jenis hubungan ini dalam proyek saya saat ini. Saya menggunakan MVC 1 dan LINQ-to-SQL. Saya mengalami frustrasi yang sama persis seperti yang Anda alami sekarang. Rintangan terbesar adalah menerima fakta bahwa LINQ-to-SQL tidak secara langsung mengelola hubungan banyak-ke-banyak, tetapi memahami bahwa itu tidak perlu untuk mendapatkan informasi yang Anda butuhkan.

Mari kita mulai dengan R dalam CRUD, karena ini adalah cara termudah untuk menunjukkan apa yang perlu dilakukan. Sekarang, pada titik ini saya akan merekomendasikan membuat model tampilan yang sangat diketik, hanya untuk memudahkan tugas menggabungkan data tampilan Anda dan menyederhanakan penugasan data makanan ke tampilan Rincian:

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; }
    }
}

Untuk mengambil makanan dan daftar bahannya, inilah metode pengontrol:

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);
}

Seperti yang dinyatakan sebelumnya, LINQ-to-SQL tidak secara langsung mendukung hubungan banyak-ke-banyak, yang mengapa Anda tidak dapat melihat entitas Bahan langsung dari Meal. Namun, seperti yang digambarkan dalam metode tindakan pengontrol, Anda dapat mengakses entitas asosiasi (Meals-Ingredients) dari entitas Meal. Dari entitas asosiasi, Anda dapat mengakses entitas Bahan untuk mendapatkan daftar bahan. Tampilannya akan terlihat seperti ini:

<%@ 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>

Jika skema database Anda sudah diatur dengan benar dengan hubungan kunci asing yang Anda butuhkan, pendekatan ini akan memberi Anda hasil yang Anda cari.


7
2018-01-31 20:18



Saya sangat merekomendasikan Steve Sanderson 'Pro ASP.NET MVC Framework'. Ini jauh terbaik panduan MVC ASP.NET yang pernah saya lihat, dan menurut saya jauh lebih baik daripada buku Wrox oleh tim MSoft. Layak uang jika Anda ingin masuk ke dalamnya.

Amazon Link


4
2018-01-27 06:55



Anda tidak akan mendapatkan semuanya di piring perak. Anda harus melalui hell of wtf dirimu sendiri.

Ini seperti dengan saya dan Ruby on Rails - setiap kali saya melihat cuplikan sampel atau contoh aplikasi - tampaknya super duper sederhana dan rapi. Tapi - karena saya tidak pernah benar-benar menciptakan sesuatu sendiri, saya tidak punya ide dengan apa yang dimulai.

Jadi - pergi saja beberapa buku dan aplikasi sampel. Kemudian - buat sesuatu. Perasaan ini (dengan apa yang harus dimulai, bagaimana strukturnya, dll.) Akan hilang segera.

Kemudian - jangan lupa tentang ekstrim kedua - merasa bahwa Anda tahu segalanya yang harus Anda ketahui. :)


Dan ya - Anda tidak memberikan informasi yang cukup. Ada berbagai jalan untuk dilewati. Saya yakin - Anda tidak akan ingin mendengar pendekatan desain yang didorong domain lanjutan. Baik Anda ingin melihat Sql tepat di sebelah markup html. Hanya kamu yang tahu 'isi'dan dapat memutuskan apa yang perlu, baik dan apa yang tidak.


2
2018-01-27 07:22



Saya sarankan Anda check out Profesional ASP.NET MVC 1.0. Ada seluruh bab gratis yang tersedia yang berjalan melalui beberapa pengaturan untuk aplikasi nyata.

Dan lihatlah http://www.nerddinner.com/ untuk melihat produk jadi.

Ini adalah aplikasi MVC yang sangat sederhana dan jika Anda mendapatkan buku, Anda dapat mengikutinya dari konsep hingga produk jadi.


1
2018-01-27 06:49



Saya menemukan Steven Walther memiliki beberapa tutorial hebat untuk MVC asp.net versi 1, dengan asumsi Anda bekerja dengan versi pertama karena versi 2 belum dirilis (RC saat ini). Tutorial kerja pertama dimulai di sini dan Anda harus dapat menemukan sisanya dari sana. Ia juga memiliki banyak tip yang bagus jika Anda mencari melalui blognya di situs itu.

Juga sebagian besar dari tutorial ini mencakup VB dan C #, jika itu penting bagi Anda.


0
2018-01-27 06:51