Entity Framework 6



Yüklə 1,54 Mb.
səhifə44/54
tarix17.06.2023
ölçüsü1,54 Mb.
#132013
1   ...   40   41   42   43   44   45   46   47   ...   54
EntityFramework(6,u) uzb

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



Yüklə 1,54 Mb.

Dostları ilə paylaş:
1   ...   40   41   42   43   44   45   46   47   ...   54




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2025
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin