Недопустимое имя объекта dbo.Ошибка Table1 в Entity Framework

#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

  1. Как мне это устранить?
  2. Я EntityTypeConfiguration прав?

Комментарии:

1. Вы вообще изменили код, который генерирует Entity Framework? Вы искали «StudentCourses1» во всех своих решениях?

2. Нет, не изменял никакого автоматически сгенерированного кода. Это решение «сначала код» для существующей базы данных. В моем решении вообще нет StudentCourses1.

3. Ваша свободная конфигурация предназначена для many-to-many с неявной таблицей соединений, в то время как у вас есть явный StudentCourse объект. Либо модель должна быть изменена, либо StudentCourse объект должен быть удален. У вас есть поля, отличные от StudentId, CourseId в нем?

4. Как мне изменить модель, чтобы сделать таблицу соединений явной?

5. Вам необходимо изменить тип свойств навигации на ICollection<StudentCourse> и настроить 2 one-to-many отношения.