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" });