Middle
Cum se implementează o relație 'unu la mai mulți' într-o bază de date sau în codul C#?
sobes.tech AI
Răspuns de la AI
În baza de date:
- Se creează un tabel pentru "unu" (părintele) și un tabel pentru "mulți" (copii).
- Se adaugă o cheie externă în tabelul "mulți" care face referire la cheia primară a tabelului "unu".
- Exemplu: Tabelele
CompaniesșiEmployees. În tabelulEmployees, există o coloanăCompanyId(cheie externă) care face referire laId(cheie primară) în tabelulCompanies.
În cod C#:
Cu Entity Framework Core:
- Se definesc clasele modele pentru părinți și copii.
- Clasa părinte include o colecție de obiecte copii.
- Clasa copil include o referință la obiectul părinte și cheia externă.
public class Company { public int Id { get; set; } public string Name { get; set; } public ICollection<Employee> Employees { get; set; } // Proprietate de navigare pentru "mulți" } public class Employee { public int Id { get; set; } public string Name { get; set; } public int CompanyId { get; set; } // Cheie externă public Company Company { get; set; } // Proprietate de navigare pentru "unu" } - În contextul bazei de date, se configurează relațiile (uneori Entity Framework Core le poate detecta după convenție).
public class ApplicationDbContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Specificare explicită a relației (nu întotdeauna necesară) modelBuilder.Entity<Company>() .HasMany(c => c.Employees) // Compania are mulți angajați .WithOne(e => e.Company) // Angajatul are o singură companie .HasForeignKey(e => e.CompanyId); // Cheie externă în tabelul Employee } }
Fără ORM (manual):
- Se obține datele din baza de date folosind interogări JOIN.
// Exemplu de interogare SQL // SELECT c.Name AS CompanyName, e.Name AS EmployeeName // FROM Companies c // JOIN Employees e ON c.Id = e.CompanyId; - Se creează clasele corespunzătoare și se leagă manual obiectele după obținerea datelor.
public class Company { public string Name { get; set; } public List<Employee> Employees { get; set; } // Colecție pentru stocarea obiectelor legate } public class Employee { public string Name { get; set; } } // Exemplu de creare a obiectelor după obținerea datelor // 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" });