Middle
Jak implementovat vztah 'jeden ku mnoha' v databázi nebo v kódu C#?
sobes.tech AI
Odpověď od AI
V databázi:
- Vytváří se tabulka pro "jednoho" (rodiče) a tabulka pro "mnohé" (děti).
- Do tabulky "mnohých" se přidá cizí klíč odkazující na primární klíč tabulky "jednoho".
- Příklad: Tabulky
CompaniesaEmployees. V tabulceEmployeesje sloupecCompanyId(cizí klíč), odkazující naId(primární klíč) v tabulceCompanies.
V kódu v C#:
S použitím Entity Framework Core:
- Definují se třídy modelů pro rodiče a děti.
- Třída rodiče obsahuje kolekci dětských objektů.
- Třída dítěte obsahuje odkaz na rodičovský objekt a cizí klíč.
public class Company { public int Id { get; set; } public string Name { get; set; } public ICollection<Employee> Employees { get; set; } // Navigační vlastnost pro "mnohé" } public class Employee { public int Id { get; set; } public string Name { get; set; } public int CompanyId { get; set; } // Cizí klíč public Company Company { get; set; } // Navigační vlastnost pro "jedno" } - V kontextu databáze se nastavují vztahy (někdy je Entity Framework Core může určit podle konvence).
public class ApplicationDbContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Explicitní určení vztahu (ne vždy nutné) modelBuilder.Entity<Company>() .HasMany(c => c.Employees) // Společnost má mnoho zaměstnanců .WithOne(e => e.Company) // Zaměstnanec má jednu společnost .HasForeignKey(e => e.CompanyId); // Cizí klíč v tabulce Employee } }
Bez ORM (ručně):
- Získání dat z DB pomocí JOIN dotazů.
// Příklad SQL dotazu // SELECT c.Name AS CompanyName, e.Name AS EmployeeName // FROM Companies c // JOIN Employees e ON c.Id = e.CompanyId; - Vytvoření odpovídajících tříd a ruční spojování objektů po získání dat.
public class Company { public string Name { get; set; } public List<Employee> Employees { get; set; } // Kolekce pro uložení propojených objektů } public class Employee { public string Name { get; set; } } // Příklad vytvoření objektů po získání dat // 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" });