Middle
Маалыматтар базасында же C# кодунда 'бирден көп' мамилени кантип ишке ашыруу керек?
sobes.tech AI
AIден жооп
Маалыматтар базасында:
- "бирөө" (ата-эне) жана "көп" (балдар) үчүн таблица түзүлөт.
- "көптөрдүн" таблицасына сырткы ачкыч кошулат, ал "бирөөнүн" таблицасынан биринчи ачкычка шилтеме кылат.
- Мисал:
CompaniesжанаEmployeesтаблицалары.EmployeesтаблицасындаCompanyId(сырткы ачкыч) бар, алId(башкы ачкыч)Companiesтаблицасындагы.
C# кодунда:
Entity Framework Core колдонуу менен:
- моделдик класстар аныкталат ата-эне жана балдар үчүн:
- ата-эне классы балдардын топтомун камтыйт:
- балдар классы ата-энеге шилтеме жана сырткы ачкычка ээ:
public class Company { public int Id { get; set; } public string Name { get; set; } public ICollection<Employee> Employees { get; set; } // "көптөр" үчүн навигациялык мүнөздөмө } public class Employee { public int Id { get; set; } public string Name { get; set; } public int CompanyId { get; set; } // Сырткы ачкыч public Company Company { get; set; } // "бирөө" үчүн навигациялык мүнөздөмө } - Маалыматтар базасы контекстинде байланыштар орнотулат (кейде Entity Framework Core алардын конвенция боюнча аныктай алат):
public class ApplicationDbContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Ачык көрсөтүү (баардык учурда зарыл эмес) modelBuilder.Entity<Company>() .HasMany(c => c.Employees) // Компанияда көп кызматкер бар .WithOne(e => e.Company) // Кызматкер бир компанияга ээ .HasForeignKey(e => e.CompanyId); // Сырткы ачкыч Employee таблицасында } }
ORM жок (кол менен):
- JOIN суроолору аркылуу маалымат алуу:
// SQL суроо мисалы // SELECT c.Name AS CompanyName, e.Name AS EmployeeName // FROM Companies c // JOIN Employees e ON c.Id = e.CompanyId; - тиешелүү класстарды түзүү жана маалымат алгандан кийин объекттерди кол менен байланыштыруу:
public class Company { public string Name { get; set; } public List<Employee> Employees { get; set; } // Байланыштуу объекттерди сактоо үчүн топтом } public class Employee { public string Name { get; set; } } // Маалымат алгандан кийин объекттерди түзүү мисалы // 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" });