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