EF Core Извличне на данни от контекста
Примерна база Student System от Entity Framework Relations (04 упражнение)
https://imgur.com/eP9yS4w Искам да взема всички студенти с техните курсове.
Получава ми се само с JOIN. А трябва да има и начин със SELECT и INSERT.
var context = new StudentSystemContext();
var students = context.Students
.Join(context.StudentCourses,
s => s.StudentId,
sc => sc.StudentId,
(s, sc) => new
{
s.Name,
s.PhoneNumber,
sc.CourseId
})
.Join(context.Courses,
sc => sc.CourseId,
c => c.CourseId,
(sc, c) => new
{
sc.Name,
sc.PhoneNumber,
Course = c.Name
})
.ToList();
Класовете са описани, връзките са описани, минава в Judge, има данни в базата и работи с JOIN. Как да стане със SELECT и INSERT?
Не работи примерът на VasilValchanov . StudentCourses са CourseEnrollments и е колекция. Това са класовете:
public class Student { public int StudentId { get; set; } public string Name { get; set; } public string PhoneNumber { get; set; } public DateTime RegisteredOn { get; set; } public DateTime? Birthday { get; set; } public ICollection<StudentCourse> CourseEnrollments { get; set; } = new List<StudentCourse>(); public ICollection<Homework> HomeworkSubmissions { get; set; } = new List<Homework>(); } public class Course { public int CourseId { get; set; } public string Name { get; set; } public string Description { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public decimal Price { get; set; } public ICollection<StudentCourse> StudentsEnrolled { get; set; } = new List<StudentCourse>(); public ICollection<Resource> Resources { get; set; } = new List<Resource>(); public ICollection<Homework> HomeworkSubmissions { get; set; } = new List<Homework>(); } public class StudentCourse { public int StudentId { get; set; } public Student Student { get; set; } public int CourseId { get; set; } public Course Course { get; set; } }
Това е връзката:
modelBuilder.Entity<StudentCourse>().HasKey(sc => new { sc.StudentId, sc.CourseId }); modelBuilder.Entity<StudentCourse>().HasOne(sc => sc.Student).WithMany(s => s.CourseEnrollments); modelBuilder.Entity<StudentCourse>().HasOne(sc => sc.Course).WithMany(c => c.StudentsEnrolled);
var students = db.Students
.Select(s => new
{
s.Name,
Coureses = s.CourseEnrollments
}).ToList();
CourseEnrollments тази колекция я инициализираш като List.
И във връзките не си посочил ForeignKey може да е проблем.
modelBuilder.Entity<StudentCourse>().HasOne(sc => sc.Student).WithMany(c => c.CourseEnrollments).HasForeignKey(sc => sc.StudentId);
modelBuilder.Entity<StudentCourse>().HasOne(sc => sc.Course).WithMany(c => c.StudentsEnrolled).HasForeignKey(sc => sc.CourseId);
Благодаря за отделеното време! Бях пропуснал HasForeignKey, но не знам дали има значение за връзката между ентитата?
Отделно ми се бъгна Intellisense и сега разбрах, че не мога без него. Ей тази заявка измъдрих накрая:
var students = context.Students .Select(s => new { StudentName = s.Name, Courses = s.CourseEnrollments .Select(sc => new { sc.Course.Name }) }) .ToList();