Middle
Ako implementovať vzťah 'jeden ku mnohým' v databáze alebo v kóde C#?
sobes.tech AI
Odpoveď od AI
V databáze:
- Vytvára sa tabuľka pre "jedného" (rodiča) a tabuľka pre "mnohé" (deti).
- Do tabuľky "mnohých" sa pridá cudzí kľúč odkazujúci na primárny kľúč tabuľky "jedného".
- Príklad: Tabuľky
CompaniesaEmployees. V tabuľkeEmployeesje stĺpecCompanyId(cudzí kľúč), ktorý odkazuje naId(primárny kľúč) v tabuľkeCompanies.
V kóde v C#:
S použitím Entity Framework Core:
- Definujú sa modelové triedy pre rodiča a deti.
- Trieda rodiča obsahuje kolekciu dcérskych objektov.
- Trieda dieťaťa obsahuje odkaz na rodičovský objekt a cudzí kľúč.
public class Company { public int Id { get; set; } public string Name { get; set; } public ICollection<Employee> Employees { get; set; } // Navigačná vlastnosť pre "mnohé" } public class Employee { public int Id { get; set; } public string Name { get; set; } public int CompanyId { get; set; } // Cudzí kľúč public Company Company { get; set; } // Navigačná vlastnosť pre "jedno" } - V kontexte databázy sa nastavujú vzťahy (niekedy Entity Framework Core ich môže určiť podľa konvencie).
public class ApplicationDbContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Explicitné určenie vzťahu (nie vždy je to potrebné) modelBuilder.Entity<Company>() .HasMany(c => c.Employees) // Spoločnosť má veľa zamestnancov .WithOne(e => e.Company) // Zamestnanec má jednu spoločnosť .HasForeignKey(e => e.CompanyId); // Cudzí kľúč v tabuľke Employee } }
Bez ORM (ručne):
- Získanie dát z DB pomocou JOIN dotazov.
// Príklad SQL dotazu // SELECT c.Name AS CompanyName, e.Name AS EmployeeName // FROM Companies c // JOIN Employees e ON c.Id = e.CompanyId; - Vytvorenie zodpovedajúcich tried a ručné prepojenie objektov po získaní dát.
public class Company { public string Name { get; set; } public List<Employee> Employees { get; set; } // Kolekcia na uloženie prepojených objektov } public class Employee { public string Name { get; set; } } // Príklad vytvorenia objektov po získaní dát // 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" });