Middle
Kuidas rakendada andmebaasis või C# koodis 'üks kuni paljud' suhet?
sobes.tech AI
Vastus AI-lt
Andmebaasis:
- Loome tabeli "ühele" (vanem) ja tabeli "palju" (lapsed).
- Palju tabelis lisatakse väline võti, mis viitab "ühe" tabeli primaarvõtmele.
- Näide: tabelid
CompaniesjaEmployees. TabelisEmployeeson veergCompanyId(väline võti), mis viitabId(primaarvõti) tabelisCompanies.
C# koodis:
Entity Framework Core kasutades:
- määratletakse mudelklassid vanemale ja lastele:
- Vanema klass sisaldab kogumit lasteobjektidest:
- Lapse klass sisaldab viidet vanemobjektile ja välist võtit:
public class Company { public int Id { get; set; } public string Name { get; set; } public ICollection<Employee> Employees { get; set; } // Navigatsioonisõltuvus "palju" } public class Employee { public int Id { get; set; } public string Name { get; set; } public int CompanyId { get; set; } // Väline võti public Company Company { get; set; } // Navigatsioonisõltuvus "üks" } - Andmebaasi kontekstis määratakse suhted (mõnikord saab Entity Framework Core need määrata konventsiooni järgi):
public class ApplicationDbContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Selge seose määramine (pole alati vajalik) modelBuilder.Entity<Company>() .HasMany(c => c.Employees) // Ettevõttel on palju töötajaid .WithOne(e => e.Company) // Töötajal on üks ettevõte .HasForeignKey(e => e.CompanyId); // Väline võti töötaja tabelis } }
Ilma ORM-ita (käsitsi):
- Andmete saamine andmebaasist JOIN-päringutega:
// SQL-päringu näide // SELECT c.Name AS CompanyName, e.Name AS EmployeeName // FROM Companies c // JOIN Employees e ON c.Id = e.CompanyId; - Vastavate klasside loomine ja objektide käsitsi ühendamine pärast andmete saamist:
public class Company { public string Name { get; set; } public List<Employee> Employees { get; set; } // Seotud objektide salvestamiseks kogum } public class Employee { public string Name { get; set; } } // Näide objektide loomise kohta pärast andmete saamist // 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" });