Middle
Hoe implementeer je een 'een-op-veel' relatie in een database of in C#-code?
sobes.tech AI
Antwoord van AI
In de database:
- Er wordt een tabel gemaakt voor "één" (de ouder) en een tabel voor "veel" (de kinderen).
- Er wordt een buitenlandse sleutel toegevoegd aan de "veel" tabel die verwijst naar de primaire sleutel van de "één" tabel.
- Voorbeeld: Tabellen
CompaniesenEmployees. In de tabelEmployeesis er een kolomCompanyId(buitenlandse sleutel) die verwijst naarId(primaire sleutel) in de tabelCompanies.
In C# code:
Met Entity Framework Core:
- Er worden modelklassen gedefinieerd voor de ouder en de kinderen.
- De ouderklasse bevat een collectie van kindobjecten.
- De kindklasse bevat een verwijzing naar het ouderobject en de buitenlandse sleutel.
public class Company { public int Id { get; set; } public string Name { get; set; } public ICollection<Employee> Employees { get; set; } // Navigatie-eigenschap voor "veel" } public class Employee { public int Id { get; set; } public string Name { get; set; } public int CompanyId { get; set; } // Buitenlandse sleutel public Company Company { get; set; } // Navigatie-eigenschap voor "één" } - In de databasecontext worden de relaties geconfigureerd (soms kan Entity Framework Core ze detecteren op basis van conventie).
public class ApplicationDbContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Expliciete specificatie van de relatie (niet altijd nodig) modelBuilder.Entity<Company>() .HasMany(c => c.Employees) // Een bedrijf heeft veel werknemers .WithOne(e => e.Company) // Een werknemer heeft één bedrijf .HasForeignKey(e => e.CompanyId); // Buitenlandse sleutel in de tabel Employee } }
Zonder ORM (handmatig):
- Het ophalen van gegevens uit de database met JOIN-query's.
// Voorbeeld SQL-query // SELECT c.Name AS CompanyName, e.Name AS EmployeeName // FROM Companies c // JOIN Employees e ON c.Id = e.CompanyId; - Het maken van de bijbehorende klassen en handmatig koppelen van objecten na het ophalen van gegevens.
public class Company { public string Name { get; set; } public List<Employee> Employees { get; set; } // Collectie voor het opslaan van gerelateerde objecten } public class Employee { public string Name { get; set; } } // Voorbeeld van het maken van objecten na het ophalen van gegevens // 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" });