مشکل در کویری گرفتن از جداول رابطه ای

soroushSaidy

عضویت : 1396/09/29 پرسش ها : 8 پاسخ ها : 5

مشکل در کویری گرفتن از جداول رابطه ای

ارسال شده در : ‫۱ ماه قبل، جمعه ۲۵ بهمن ۱۳۹۸، ساعت ۱۰:۵۵

سلام استاد مدائنی وقتتون بخیر در رابطه با دات نت کور 2.1 من همزمان با شما یه پروژه دیگه استارت زدم. دوتا تیبل دارم یکی Person و یکی Wife رابطه ی یک به چند هست (هر شخص میتونه چندین همسر داشته باشه). حالا وقتی کویری میزنم رو Person (فیلد id به لایه سرویس پاس میشه بر حسب اون شخص پیدا میشه و برگردونده میشه) اطلاعات Person رو میده درسته ولی اطلاعات همسرانش (جدول wife) رو نمیده. این جریانش چیه چطور میشه کاری کرد تو جداول دارای رابطه که وقتی کویری رو جدول اصلی میزنیم (person) جداولی که باهاش در ارتباط هستن (wife) رو هم برگردونه؟ قطعه کد در پایین اوردم:

public class Person
{
public int PersonId {get; set;}
public string PersonName {get; set;}
public string PersonFamily {get; set;}

public virtual List<Wife> Wifes {get; set;}

}


public class Wife
{
public int PersonId {get; set;}
public int WifeId {get; set;}
public string WifeName {get; set;}
public string WifeFamily {get; set;}

public virtual Person Person {get; set;}

}

الان مشکل من اینه میخوام وقتی کویری select زدم رو جدول person اطلاعات مربوط به جدول wife که تو دیتابیس چندین همسر واسه اون شخص تعیین کردم برگردونده بشه که نمیشه و پراپرتی Wifes از جدول person مقدار null برمیگردونه!

این متد لایه سرویس:

 async Task<DomainClasses.Person.Person> IPerson.GetPersonById(int id)
        {
            return await _MyDBContext.People.FindAsync(id);
        }

یعنی استاد موقعی که از متد find استفاده کنیم دیگه اطلاعات مربوط به جداول دیگه که با اونها رابطه داره (یک به چند) برگردونده نمیشه؟؟

این هم Fluent:

  modelBuilder.Entity("DomainClasses.Wife.Wife", b =>
                {
                    b.HasOne("DomainClasses.Person.Person", "Person")
                        .WithMany("Wife")
                        .HasForeignKey("PersonId")
                        .OnDelete(DeleteBehavior.Cascade);
                });

 

 

ایمان مدائنی

عضویت : 1396/09/10 پرسش ها : 5 پاسخ ها : 10871

(پاسخ صحیح)

ارسال شده در :‫۱ ماه قبل، جمعه ۲۵ بهمن ۱۳۹۸، ساعت ۲۲:۱۰

سلام 

باید در کوئری از Eager load یا همان Include استفاده کنید تا بیاد 

در ef core دیگه lazy load نداریم 

1 تشکر

soroushSaidy

عضویت : 1396/09/29 پرسش ها : 8 پاسخ ها : 5
ارسال شده در :‫۱ ماه قبل، جمعه ۲۵ بهمن ۱۳۹۸، ساعت ۲۲:۴۹

تشکر عزیز کاش زودتر میپرسیدم 1 روز دقیق منو معطل کرد 🌸

0 تشکر

برای ارسال پاسخ باید وارد شوید و یا در سایت عضو شوید