Middle
Ma'lumotlar bazasida yoki C# kodida 'birga ko'p' munosabatni qanday amalga oshirish mumkin?
sobes.tech AI
AIdan javob
Ma'lumotlar bazasida:
- "bir" (ota) va "ko'p" (bolalar) uchun jadvallar yaratiladi.
- "Ko'p" jadvaliga, "bir" jadvalining birinchi kalitiga murojaat qiluvchi tashqi kalit qo'shiladi.
- Misol uchun:
CompaniesvaEmployeesjadvallari.Employeesjadvalida,CompanyId(tashqi kalit) ustuni,CompaniesjadvalidagiId(birinchi kalit) ga murojaat qiladi.
C# kodida:
Entity Framework Core bilan:
- ota va bolalar uchun model sinflari aniqlanadi.
- ota sinfi, bolalar ob'ektlarining to'plamini o'z ichiga oladi.
- bola sinfi, ota ob'ektiga murojaat va tashqi kalitni o'z ichiga oladi.
public class Company { public int Id { get; set; } public string Name { get; set; } public ICollection<Employee> Employees { get; set; } // "Ko'p" uchun navigatsiya xususiyati } public class Employee { public int Id { get; set; } public string Name { get; set; } public int CompanyId { get; set; } // Tashqi kalit public Company Company { get; set; } // "Bir" uchun navigatsiya xususiyati } - Ma'lumotlar bazasi kontekstida, munosabatlar sozlanadi (ba'zan Entity Framework Core ularni konventsiyaga ko'ra aniqlay oladi).
public class ApplicationDbContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Aniq ko'rsatish (har doim zarur emas) modelBuilder.Entity<Company>() .HasMany(c => c.Employees) // Kompaniya ko'p xodimga ega .WithOne(e => e.Company) // Xodimning bitta kompaniyasi bor .HasForeignKey(e => e.CompanyId); // Employee jadvalidagi tashqi kalit } }
ORMsiz (qo'lda):
- JOIN so'rovlaridan foydalanib, ma'lumotlar bazasidan ma'lumot olinadi.
// SQL so'rovi misoli // SELECT c.Name AS CompanyName, e.Name AS EmployeeName // FROM Companies c // JOIN Employees e ON c.Id = e.CompanyId; - Mos keladigan sinflar yaratiladi va ma'lumotlar olgach, ob'ektlar qo'lda bog'lanadi.
public class Company { public string Name { get; set; } public List<Employee> Employees { get; set; } // Bog'langan ob'ektlarni saqlash uchun to'plam } public class Employee { public string Name { get; set; } } // Ma'lumotlar olgach, ob'ektlar yaratish misoli // Company company = new Company { Name = "ACME Corp", Employees = new List<Employee>() }; // company.Employees.Add(new Employee { Name = "Alice" }); // company.Employees.Add(new Employee { Name = "Bob" });