Middle
Comment implémenter une relation 'un à plusieurs' dans une base de données ou dans du code C#?
sobes.tech IA
Réponse de l'IA
Dans la base de données:
- Une table est créée pour "un" (le parent) et une autre pour "plusieurs" (les enfants).
- Une clé étrangère est ajoutée dans la table "plusieurs" qui référence la clé primaire de la table "un".
- Exemple : Tables
CompaniesetEmployees. Dans la tableEmployees, il y a une colonneCompanyId(clé étrangère) qui référenceId(clé primaire) dans la tableCompanies.
En code C# :
Avec Entity Framework Core :
- Des classes de modèles pour le parent et les enfants sont définies.
- La classe du parent inclut une collection d'objets enfants.
- La classe de l'enfant inclut une référence à l'objet parent et la clé étrangère.
public class Company { public int Id { get; set; } public string Name { get; set; } public ICollection<Employee> Employees { get; set; } // Propriété de navigation pour "plusieurs" } public class Employee { public int Id { get; set; } public string Name { get; set; } public int CompanyId { get; set; } // Clé étrangère public Company Company { get; set; } // Propriété de navigation pour "un" } - Dans le contexte de la base de données, les relations sont configurées (parfois Entity Framework Core peut les détecter par convention).
public class ApplicationDbContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Définition explicite de la relation (pas toujours nécessaire) modelBuilder.Entity<Company>() .HasMany(c => c.Employees) // La société a beaucoup d'employés .WithOne(e => e.Company) // L'employé a une seule société .HasForeignKey(e => e.CompanyId); // Clé étrangère dans la table Employee } }
Sans ORM (manuel) :
- Récupération des données depuis la base de données en utilisant des requêtes JOIN.
// Exemple de requête SQL // SELECT c.Name AS CompanyName, e.Name AS EmployeeName // FROM Companies c // JOIN Employees e ON c.Id = e.CompanyId; - Création des classes correspondantes et liaison manuelle des objets après récupération des données.
public class Company { public string Name { get; set; } public List<Employee> Employees { get; set; } // Collection pour stocker les objets liés } public class Employee { public string Name { get; set; } } // Exemple de création d'objets après récupération des données // 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" });