Middle
Veritabanında veya C# kodunda 'birden çoğa' ilişki nasıl uygulanır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Veritabanında:
- "Bir" (ebeveyn) ve "birçok" (çocuklar) için tablolar oluşturulur.
- "Çok" tablosuna, "bir" tablosunun birincil anahtarına referans veren bir dış anahtar eklenir.
- Örnek:
CompaniesveEmployeestabloları.Employeestablosunda,CompanyId(dış anahtar) sütunu,CompaniestablosundakiId(birincil anahtar) sütununa referans verir.
C# kodunda:
Entity Framework Core kullanılarak:
- Ebeveyn ve çocuklar için model sınıfları tanımlanır.
- Ebeveyn sınıfı, çocuk nesnelerinin koleksiyonunu içerir.
- Çocuk sınıfı, ebeveyn nesnesine referans ve dış anahtar içerir.
public class Company { public int Id { get; set; } public string Name { get; set; } public ICollection<Employee> Employees { get; set; } // "Çok" için gezinme özelliği } public class Employee { public int Id { get; set; } public string Name { get; set; } public int CompanyId { get; set; } // Dış anahtar public Company Company { get; set; } // "Bir" için gezinme özelliği } - Veritabanı bağlamında ilişkiler yapılandırılır (bazen Entity Framework Core bunları varsayılan olarak tanıyabilir).
public class ApplicationDbContext : DbContext { public DbSet<Company> Companies { get; set; } public DbSet<Employee> Employees { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { // Açıkça ilişki belirtimi (her zaman gerekli değildir) modelBuilder.Entity<Company>() .HasMany(c => c.Employees) // Şirketin birçok çalışanı var .WithOne(e => e.Company) // Çalışanın bir şirketi var .HasForeignKey(e => e.CompanyId); // Employee tablosundaki dış anahtar } }
ORM olmadan (el ile):
- JOIN sorguları kullanılarak veritabanından veri alınır.
// SQL sorgusu örneği // SELECT c.Name AS CompanyName, e.Name AS EmployeeName // FROM Companies c // JOIN Employees e ON c.Id = e.CompanyId; - Uygun sınıflar oluşturulur ve veriler alındıktan sonra nesneler manuel olarak bağlanır.
public class Company { public string Name { get; set; } public List<Employee> Employees { get; set; } // Bağlantılı nesneleri saklamak için koleksiyon } public class Employee { public string Name { get; set; } } // Veriler alındıktan sonra nesne oluşturma örneği // 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" });