دسته بندی ها
08:32 1399/10/27

ایجاد ارتباط جداول پدر و فرزند (Parent-child) و نمایش در View در Asp.net Core

مشخصات سوال کننده :
کاربر : ms2soft     امتیاز کاربر : 0     رتبه کاربر : 7019
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3685
پاسخ دهنده : hamid_b 18:00 1399/10/27

اگر کدهای خودتون و ستون های جداول خودتون رو هم قرار می دادید بهتر می شد راهنمایی کرد اما با توجه به اطلاعات ارائه شده به صورت فرضی پاسخ میدم خدمتتون.

فرض کنید دو جدول به صورت زیر دارید که رابطه 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();

کدهای بالا دقیقا خروجی که نیاز دارید رو بهتون میدن . یعنی یک رکورد از جدول پدر به همراه رکوردهای جدول فرزند.

به این پاسخ امتیاز بدهید    1
امتیاز: 510 رتبه: 4
1 نظر
ms2soft : سپاس از راهنمایی شما.. اما اگر خواسته باشیم اطلاعات را ثبت کنیم . اطلاعات پدر و آیتم های فرزند را ذخیره و ویرایش کنیم چگونه باید عمل کنیم به طوری که Id پدر در تمام آیتمهای فرزند هم درج شود؟

امتیاز کاربر : 0   رتبه کاربر : 7019   تاریخ ثبت : 09:23 1399/10/27
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود