#c# #entity-framework-6 #ef-fluent-api
#c# #entity-framework-6 #ef-fluent-api
Вопрос:
У меня есть следующие таблицы: StudentCourses
является таблицей сопоставления Student
и Course
Student
(Идентификатор, ..)Course
(Идентификатор, ..)StudentCourses
(Идентификатор студента, идентификатор курса)
Классы модели:
public class Student {
....
....
public virtual ICollection<Course> Courses { get; set; }
}
public class Course {
...
...
public virtual ICollection<Student> Students { get; set; }
}
public class StudentCourse {
...
...
public virtual Student Student { get; set; }
}
Сопоставления устанавливаются следующим образом:
public class StudentConfiguration
: EntityTypeConfiguration<Student>
{
public StudentConfiguration()
{
HasKey(x => x.Id);
//Many to many
HasMany(s => s.Course)
.WithMany(t => t.Students)
.Map(x =>
{
x.ToTable("StudentCourses");
x.MapLeftKey("StudentId");
x.MapRightKey("CourseId");
}
);
}
}
public class StudentCourseConfiguration
: EntityTypeConfiguration<StudentCourse>
{
public StudentCourseConfiguration()
{
HasKey(x => new {x.StudentId, x.CourseId});
}
}
Я пытаюсь получить коллекцию Courses
с количеством студентов, зачисленных на каждый курс.
public ActionResult GetAllCourseInfo()
{
var courses = _context.Course.ToList();
var courseInfo = new List<CourseInfo>();
foreach (var course in courses )
{
var studentCount = _context.StudentCourse.Count(x => x.Student.CourseName.Equals(course.CourseName));
courseInfo.Add(new CourseInfo{ CourseName = course.CourseName, Count = studentCount });
}
return Json(courseInfo, JsonRequestBehavior.AllowGet);
}
Я получаю исключение
Недопустимое имя объекта dbo.StudentCourses1
- Как мне это устранить?
- Я
EntityTypeConfiguration
прав?
Комментарии:
1. Вы вообще изменили код, который генерирует Entity Framework? Вы искали «StudentCourses1» во всех своих решениях?
2. Нет, не изменял никакого автоматически сгенерированного кода. Это решение «сначала код» для существующей базы данных. В моем решении вообще нет StudentCourses1.
3. Ваша свободная конфигурация предназначена для
many-to-many
с неявной таблицей соединений, в то время как у вас есть явныйStudentCourse
объект. Либо модель должна быть изменена, либоStudentCourse
объект должен быть удален. У вас есть поля, отличные отStudentId, CourseId
в нем?4. Как мне изменить модель, чтобы сделать таблицу соединений явной?
5. Вам необходимо изменить тип свойств навигации на
ICollection<StudentCourse>
и настроить 2one-to-many
отношения.