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