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); // Արտաքին բանալի աշխատակիցների աղյուսակում } }
Բաց 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" });