Entity Framework Core — Настройка сущности имеет виртуальную коллекцию, которая может объединяться по условию двух разны ⇐ C#
Entity Framework Core — Настройка сущности имеет виртуальную коллекцию, которая может объединяться по условию двух разны
Я использую .NET 7 и EF Core 7.
У меня есть сущность Student с двумя свойствами: StudentId (первичный ключ) и GradeId.
публичный класс Студент { общественный Guid StudentId {получить; набор; } общедоступная строка Имя {get; набор; } общественный Guid GradeId {получить; набор; } } У меня есть класс Course, содержащий информацию о курсе.
Курс общедоступного класса { общественный Guid CourseId {получить; набор; } общедоступная строка Имя {get; набор; } } С Студентами связаны два типа курсов: специальный курс, зарегистрированный только для учащихся, и курсы, связанные с оценкой учащегося.
публичный класс StudentRegisteredCourse { общедоступный идентификатор Guid {get; набор; } общественный Guid StudentId {получить; набор; } общественный Guid CourseId {получить; набор; } } общедоступный класс GradeCourse { общедоступный идентификатор Guid {get; набор; } общественный Guid GradeId {получить; набор; } общественный Guid CourseId {получить; набор; } } Например, у меня Джон учится в 10 классе. В 10 классе учащийся должен пройти курсы математики 10 и физики 10. Джон зарегистрировался на курс C# Foundation для себя.
Итак, у Джона будет три курса: математика 10, физика 10 и C# Foundation.
В настоящее время я могу создавать связанные курсы Student с двумя виртуальными коллекциями RegisteredCourses и GradeCourses.
публичный класс Студент { общественный Guid StudentId {получить; набор; } общедоступная строка Имя {get; набор; } общественный Guid GradeId {получить; набор; } общественный виртуальный ICollection RegisteredCourses {get; набор; } общественный виртуальный ICollection GradeCourses {get; набор; } } При использовании GradeCourses ему необходимо присоединиться по GradeId вместо первичного ключа:
modelBuilder.Entity() .HasMany(c => c.GradeCourses) .С одним() .HasForeignKey(c => c.GradeId) .HasPrincipalKey(c => c.GradeId); Этот дизайн у меня работает, и я могу фильтровать список студентов, у которых есть определенный курс.
var StudentOfSpanishCourse = dbContext.Students .Where(c => c.RegisteredCourses.Any(c => c.CourseId = 'Идентификатор курса испанского языка') || c.GradeCourses.Any(c => c.CourseId = 'Идентификатор курса испанского языка')); Однако, как мы видим, нам нужно отфильтровать обе коллекции: RegisteredCourses и GradeCourses, чтобы получить список студентов курсов испанского языка.
Я пытаюсь упростить это, найдя способ сделать так, чтобы у Student была только виртуальная коллекция с именем CoursesOfStudent. CoursesOfStudent представляет собой объединение всех StudentCourse и GradeCourse.
Итак, при использовании Student для фильтрации нам просто нужно указать «где» только для одной коллекции.
Для этого я создал представление CourseOfStudent, которое объединяет таблицы StudentRegisteredCourse и GradeCourse.
СОЗДАТЬ ПРЕДСТАВЛЕНИЕ CourseOfStudent КАК ВЫБЕРИТЕ CourseId, StudentId, NULL КАК GradeId ОТ студента зарегистрированного курса СОЮЗ ВСЕХ ВЫБЕРИТЕ CourseId, NULL КАК StudentId, GradeId ИЗ GradeCourse; Я создал объект CourseOfStudent в EF и сопоставил его с созданным представлением.
публичный класс CourseOfStudent { общественный Guid CourseId {получить; набор; } общественный Guid StudentId {получить; набор; } общественный Guid GradeId {получить; набор; } } и сущность Студент изменяется, чтобы иметь эту коллекцию.
публичный класс Студент { общественный Guid StudentId {получить; набор; } общедоступная строка Имя {get; набор; } общественный Guid GradeId {получить; набор; } общедоступный виртуальный ICollection CoursesOfStudent {get; набор; } } Моя текущая проблема заключается в том, что я не знаю, как настроить коллекцию CoursesOfStudent для наличия внешнего ключа, присоединитесь к StudentId ИЛИ < code>Идентификатор оценки.
Может у кого-то есть такая же проблема? Можете ли вы дать мне несколько советов?
Я использую .NET 7 и EF Core 7.
У меня есть сущность Student с двумя свойствами: StudentId (первичный ключ) и GradeId.
публичный класс Студент { общественный Guid StudentId {получить; набор; } общедоступная строка Имя {get; набор; } общественный Guid GradeId {получить; набор; } } У меня есть класс Course, содержащий информацию о курсе.
Курс общедоступного класса { общественный Guid CourseId {получить; набор; } общедоступная строка Имя {get; набор; } } С Студентами связаны два типа курсов: специальный курс, зарегистрированный только для учащихся, и курсы, связанные с оценкой учащегося.
публичный класс StudentRegisteredCourse { общедоступный идентификатор Guid {get; набор; } общественный Guid StudentId {получить; набор; } общественный Guid CourseId {получить; набор; } } общедоступный класс GradeCourse { общедоступный идентификатор Guid {get; набор; } общественный Guid GradeId {получить; набор; } общественный Guid CourseId {получить; набор; } } Например, у меня Джон учится в 10 классе. В 10 классе учащийся должен пройти курсы математики 10 и физики 10. Джон зарегистрировался на курс C# Foundation для себя.
Итак, у Джона будет три курса: математика 10, физика 10 и C# Foundation.
В настоящее время я могу создавать связанные курсы Student с двумя виртуальными коллекциями RegisteredCourses и GradeCourses.
публичный класс Студент { общественный Guid StudentId {получить; набор; } общедоступная строка Имя {get; набор; } общественный Guid GradeId {получить; набор; } общественный виртуальный ICollection RegisteredCourses {get; набор; } общественный виртуальный ICollection GradeCourses {get; набор; } } При использовании GradeCourses ему необходимо присоединиться по GradeId вместо первичного ключа:
modelBuilder.Entity() .HasMany(c => c.GradeCourses) .С одним() .HasForeignKey(c => c.GradeId) .HasPrincipalKey(c => c.GradeId); Этот дизайн у меня работает, и я могу фильтровать список студентов, у которых есть определенный курс.
var StudentOfSpanishCourse = dbContext.Students .Where(c => c.RegisteredCourses.Any(c => c.CourseId = 'Идентификатор курса испанского языка') || c.GradeCourses.Any(c => c.CourseId = 'Идентификатор курса испанского языка')); Однако, как мы видим, нам нужно отфильтровать обе коллекции: RegisteredCourses и GradeCourses, чтобы получить список студентов курсов испанского языка.
Я пытаюсь упростить это, найдя способ сделать так, чтобы у Student была только виртуальная коллекция с именем CoursesOfStudent. CoursesOfStudent представляет собой объединение всех StudentCourse и GradeCourse.
Итак, при использовании Student для фильтрации нам просто нужно указать «где» только для одной коллекции.
Для этого я создал представление CourseOfStudent, которое объединяет таблицы StudentRegisteredCourse и GradeCourse.
СОЗДАТЬ ПРЕДСТАВЛЕНИЕ CourseOfStudent КАК ВЫБЕРИТЕ CourseId, StudentId, NULL КАК GradeId ОТ студента зарегистрированного курса СОЮЗ ВСЕХ ВЫБЕРИТЕ CourseId, NULL КАК StudentId, GradeId ИЗ GradeCourse; Я создал объект CourseOfStudent в EF и сопоставил его с созданным представлением.
публичный класс CourseOfStudent { общественный Guid CourseId {получить; набор; } общественный Guid StudentId {получить; набор; } общественный Guid GradeId {получить; набор; } } и сущность Студент изменяется, чтобы иметь эту коллекцию.
публичный класс Студент { общественный Guid StudentId {получить; набор; } общедоступная строка Имя {get; набор; } общественный Guid GradeId {получить; набор; } общедоступный виртуальный ICollection CoursesOfStudent {get; набор; } } Моя текущая проблема заключается в том, что я не знаю, как настроить коллекцию CoursesOfStudent для наличия внешнего ключа, присоединитесь к StudentId ИЛИ < code>Идентификатор оценки.
Может у кого-то есть такая же проблема? Можете ли вы дать мне несколько советов?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как добавить сущности в таблицу соединения с помощью Entity Framework Core
Anonymous » » в форуме C# - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как добавить сущности в таблицу соединения с помощью Entity Framework Core
Anonymous » » в форуме C# - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-