Sobes.tech
Middle

Ma'lumotlar bazasida yoki C# kodida 'birga ko'p' munosabatni qanday amalga oshirish mumkin?

sobes.tech AI

AIdan javob

Ma'lumotlar bazasida:

  • "bir" (ota) va "ko'p" (bolalar) uchun jadvallar yaratiladi.
  • "Ko'p" jadvaliga, "bir" jadvalining birinchi kalitiga murojaat qiluvchi tashqi kalit qo'shiladi.
  • Misol uchun: Companies va Employees jadvallari. Employees jadvalida, CompanyId (tashqi kalit) ustuni, Companies jadvalidagi Id (birinchi kalit) ga murojaat qiladi.

C# kodida:

Entity Framework Core bilan:

  • ota va bolalar uchun model sinflari aniqlanadi.
  • ota sinfi, bolalar ob'ektlarining to'plamini o'z ichiga oladi.
  • bola sinfi, ota ob'ektiga murojaat va tashqi kalitni o'z ichiga oladi.
    public class Company
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public ICollection<Employee> Employees { get; set; } // "Ko'p" uchun navigatsiya xususiyati
    }
    
    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int CompanyId { get; set; } // Tashqi kalit
        public Company Company { get; set; } // "Bir" uchun navigatsiya xususiyati
    }
    
  • Ma'lumotlar bazasi kontekstida, munosabatlar sozlanadi (ba'zan Entity Framework Core ularni konventsiyaga ko'ra aniqlay oladi).
    public class ApplicationDbContext : DbContext
    {
        public DbSet<Company> Companies { get; set; }
        public DbSet<Employee> Employees { get; set; }
    
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            // Aniq ko'rsatish (har doim zarur emas)
            modelBuilder.Entity<Company>()
                .HasMany(c => c.Employees) // Kompaniya ko'p xodimga ega
                .WithOne(e => e.Company) // Xodimning bitta kompaniyasi bor
                .HasForeignKey(e => e.CompanyId); // Employee jadvalidagi tashqi kalit
        }
    }
    

ORMsiz (qo'lda):

  • JOIN so'rovlaridan foydalanib, ma'lumotlar bazasidan ma'lumot olinadi.
    // SQL so'rovi misoli
    // SELECT c.Name AS CompanyName, e.Name AS EmployeeName
    // FROM Companies c
    // JOIN Employees e ON c.Id = e.CompanyId;
    
  • Mos keladigan sinflar yaratiladi va ma'lumotlar olgach, ob'ektlar qo'lda bog'lanadi.
    public class Company
    {
        public string Name { get; set; }
        public List<Employee> Employees { get; set; } // Bog'langan ob'ektlarni saqlash uchun to'plam
    }
    
    public class Employee
    {
        public string Name { get; set; }
    }
    
    // Ma'lumotlar olgach, ob'ektlar yaratish misoli
    // 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" });