ایجاد ارتباط جداول پدر و فرزند (Parent-child) و نمایش در View در Asp.net Core
من جدولی دارم شامل اطلاعات سند مانند شماره و تاریخ سند و یک جدول دیگر شامل آیتم های سند که از طریق Id به هم ارتباط دارند حالا چطور می توانم یک ویو ایجاد کنم و اطلاعات هر دو جدول را که یکی از آنها لیستی از رکوردها است را به کنترلر ارسال کنم.
اگر کدهای خودتون و ستون های جداول خودتون رو هم قرار می دادید بهتر می شد راهنمایی کرد اما با توجه به اطلاعات ارائه شده به صورت فرضی پاسخ میدم خدمتتون.
فرض کنید دو جدول به صورت زیر دارید که رابطه Parent و Child با هم دارن.
جدول Invoice یا فاکتور (Parent)
public class Invoice
{
[Key]
public int ID {get; set;}
public DateTime InvoiceDate {get; set;}
public long InvoicePrice {get; set;}
public int CustomerID {get; set;}
}
جدول InvoiceItem یا اقلام فاکتور (Child)
public class InvoiceItem
{
[Key]
public int ID {get; set;}
public int ProductID {get; set;}
public int ProductCount {get; set;}
public int InvoiceID {get; set;}
[ForignKey("InvoiceID")]
public virtual Invoice Invoice {get; set;}
}
در کد بالا فیلد InvioceID به عنوان کلید خارجی در جدول InvoiceItem در نظر گرفته شده.
خب حالا می خوایم ببینیم چجوری میشه این دو جدول رو با هم ادغام کرد و اطلاعات رو نمایش داد. باید چند نکته رو دقت کرد. در این رابطه هر رکورد از جدول Parent یا همون جدول Invoice شامل چندین رکورد از جدول Child یا جدول InvoiceItem می شه. بنابراین ما نیاز به مدلی داریم که در اون هر رکورد از جدول Invoice شامل چندین رکورد از جدول InvoiceItem بشه. پس میتونیم مدل زیر رو ایجاد کنیم.
کافیه یک کلاس ایجاد کنید و اسمش رو مثلا InvoiceViewModel بذارید.
کدهای InvoiceViewModel
public class InvoiceViewModel
{
public int ID {get; set;}
public DateTime InvoiceDate {get; set;}
public long InvoicePrice {get; set;}
public int CustomerID {get; set;}
public List<InvoiceItem> myItem {get; set;}
}
در ویومدل بالا فیلدهای جدول پدر یا همان Invoice را داریم و در آخر گفتیم هر رکورد شامل لیستی از InvoiceItem ها می باشد.
خب می تونیم برای نمایش اطلاعات به صورت Parent-Child از کوئری زیر استفاده کنیم.
var query = (from i in _db.Invoice
select new InvoiceViewModel()
{
ID = i.ID,
InvoiceDate = i.InvoiceDate,
InvoicePrice = i.InvoicePrice,
CustomerID = i.CustomerID,
myItem = _db.InvoiceItem.where(ii => ii.InvoiceID == i.InvoiceID).ToList()
}).ToList();
کدهای بالا دقیقا خروجی که نیاز دارید رو بهتون میدن . یعنی یک رکورد از جدول پدر به همراه رکوردهای جدول فرزند.
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2