• Ko’pga-ko’p aloqa (many-to-many)
  • HasMany()
  • Dasturiy injiniring (EntityFramework 6)




    Download 1,39 Mb.
    bet43/53
    Sana30.11.2023
    Hajmi1,39 Mb.
    #108476
    1   ...   39   40   41   42   43   44   45   46   ...   53
    Bog'liq
    Dasturiy injiniring

    WithRequiredPrincipal() metodi orqali majburiy aloqa va bitta ob’ekt asosiy sifatida o’rnatiladi. Ushbu holda asosiy ob’ekt sifatida Phone modeli Phone: WithRequiredPrincipal(c => c.BestSeller) kabi ko’rsatilgan.
    Company modeli namoyish qilinadigan jadval esa Phones jadvaliga ikkilamchi kalitdan iborat bo’ladi.


    Ko’pga-ko’p aloqa (many-to-many)
    Yuqoridagi modelga o’zgartirish kiritamiz. Bizdagi har ikkala model boshqa modellar ro'yxatini o’zida saqlasin. Masalan, kompaniyada bir qancha turdagi telefonlar ishlab chiqarilishi va bitta telefon bir nechta kompaniyalar hamkorligida ishlab chiqilsin:
    public class Phone
    {
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection Companies { get; set; }


    public Phone()


    {
    Companies = new List();
    }
    }

    public class Company


    {
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection Phones { get; set; }


    public Company()


    {
    Phones = new List();
    }
    }

    Ushbu modelga mos aloqa quyidagicha shakllantiriladi:


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    modelBuilder.Entity()
    .HasMany(p => p.Companies)
    .WithMany(c => c.Phones);
    base.OnModelCreating(modelBuilder);
    }
    HasMany() metodi orqali Phone va Company ob’ektlari o'rtasida ko’pga-ko’p aloqa o’rnatiladi. WithMany() metodi esa Phone va Company ob’ektlari o'rtasida teskari ko’pga-ko’p aloqa o’rnatiladi.
    Yuqoridagi turdagi aloqaga mos ma’lumotlar bazasida uchinchi bog‘lovchi jadval shakllantiriladi:

    Ammo bizni ushbu turdagi bog‘lovchi jadval va ustunlari nomi qanoatlantirmaydi. Shuning uchun quyidagicha moslashtirishlarni amalga oshiramiz:


    modelBuilder.Entity()


    .HasMany(p => p.Companies)
    .WithMany(c => c.Phones)
    .Map(m =>
    {
    m.ToTable("MobileCompanies");
    m.MapLeftKey("PhoneId");
    m.MapRightKey("CompanyId");
    });



    Yuqorida keltirilgan modelaga mos quyidagi so’rovni amalga oshirishimiz mumkin:


    using (FluentContext db = new FluentContext())


    {
    var items = from i in db.Phones
    join fi in db.Companies on i.Id equals fi.Id
    where fi.Id == 1
    select i;
    foreach (var item in items)
    {
    Console.WriteLine(item.Name);
    }
    }



    Download 1,39 Mb.
    1   ...   39   40   41   42   43   44   45   46   ...   53




    Download 1,39 Mb.

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    Dasturiy injiniring (EntityFramework 6)

    Download 1,39 Mb.