Middle
Verilənlər bazasında və ya C# kodunda 'birə çox' əlaqəsini necə həyata keçirmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Veritabanında:
- "bir" (valideyn) və "bir çox" (uşaqlar) üçün cədvəllər yaradılır.
- "Çox" cədvəlinə, "bir" cədvəlinin birincil açarına istinad edən xarici açar əlavə olunur.
- Nümunə:
CompaniesvəEmployeescədvəlləri.Employeescədvəlində,CompanyId(xarici açar) sütunu,CompaniescədvəlindəkiId(birincil açar) sütununa istinad edir.
C# kodunda:
Entity Framework Core ilə:
- Valideyn və uşaqlar üçün model sinfləri təyin edilir.
- Valideyn sinfi, uşaq obyektlərinin kolleksiyasını ehtiva edir.
- Uşaq sinfi, valideyn obyektinə istinad və xarici açar ehtiva edir.
public class Company { public int Id { get; set; } public string Name { get; set; } public ICollection<Employee> Employees { get; set; } // "Çox" üçün naviqasiya xüsusiyyəti } public class Employee { public int Id { get; set; } public string Name { get; set; } public int CompanyId { get; set; } // Xarici açar public Company Company { get; set; } // "Bir" üçün naviqasiya xüsusiyyəti } - Verilənlər bazası kontekstində əlaqələr konfiqurasiya edilir (bəzən Entity Framework Core onları konvensiya əsasında aşkar edə bilər).
public class ApplicationDbContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Aydın şəkildə əlaqənin göstərilməsi (hər zaman lazım deyil) modelBuilder.Entity<Company>() .HasMany(c => c.Employees) // Şirkət çox işçiyə malikdir .WithOne(e => e.Company) // İşçinin bir şirkəti var .HasForeignKey(e => e.CompanyId); // Employee cədvəlində xarici açar } }
ORM olmadan (əl ilə):
- JOIN sorğuları istifadə edilərək məlumatlar bazasından alınır.
// SQL sorğusu nümunəsi // SELECT c.Name AS CompanyName, e.Name AS EmployeeName // FROM Companies c // JOIN Employees e ON c.Id = e.CompanyId; - Uyğun sinflər yaradılır və məlumatlar alındıqdan sonra obyektlər əl ilə əlaqələndirilir.
public class Company { public string Name { get; set; } public List<Employee> Employees { get; set; } // Əlaqəli obyektləri saxlamaq üçün kolleksiya } public class Employee { public string Name { get; set; } } // Məlumatlar alındıqdan sonra obyektlərin yaradılması nümunəsi // 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" });