Colonel_Joll
@Colonel_Joll
Learn C#, Student

Почему сущность не ссылается на другую сущность, создавшую ее?

У меня есть сущность Учитель, которая создает курс. Проблема заключается в том, что курс по какой-то причине не ссылается на учителя, который создал его. Учитель не ссылается на курс тоже. Пытался при помощи метода Update, но это не помогло.
public async Task<CourseResponse> AddCourse(CourseAddRequest courseAddRequest, Guid teacherId)
       {
            var teacher = await _teacherRepository.GetTeacher(teacherId);

            if (teacher == null)
            {
                throw new Exception("User doesn't exist");
            }
            var course = _mapper.Map<Course>(courseAddRequest);
            course.Teacher = teacher;
            course.TeacherId = teacher.Id;
            var addedCourse = await _courseRepository.AddCourse(course);
            teacher.Courses.Add(addedCourse);
            teacher = await _teacherRepository.UpdateTeacher(teacher);
            return _mapper.Map<CourseResponse>(addedCourse);
        }

Teacher:
public class Teacher : BaseEntity
    {
        public string Name { get; set; }
        public string LastName { get; set; }
        public List<Course> Courses { get; set; } = new List<Course>();
    }

Course:
public class Course : BaseEntity
    {
        public string Header { get; set; }
        public string Description { get; set; }
        public Guid TeacherId { get; set; }
        public Teacher Teacher { get; set; }

        public List<Student> StudentsOnCourse { get; set; } = new List<Student>();
    }

Пытался организовать связь один-ко-многим, но это не помогло:
class CourseEntityTypeConfiguration : IEntityTypeConfiguration<Course>
    {
        public void Configure(EntityTypeBuilder<Course> builder)
        {

            builder.HasOne(c => c.Teacher)
                .WithMany(t => t.Courses)
                .HasForeignKey(c => c.TeacherId);            
            
        }
    }

public class UniDbContext : DbContext
    {
        public UniDbContext(DbContextOptions<UniDbContext> options) : base(options)
        {

        }

        public DbSet<Course> Courses { get; set; }
        public DbSet<Student> Students { get; set; }
        public DbSet<Teacher> Teachers { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.ApplyConfigurationsFromAssembly(typeof(CourseEntityTypeConfiguration).Assembly);


        }
    }

В Startup:
services.AddDbContext<UniDbContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
                    sqlOpt => sqlOpt.MigrationsAssembly(typeof(UniDbContext).Assembly.FullName)
            ));

У меня есть git-репозиторий, в котором можно поподробнее все посмотреть:
https://github.com/ChuvashPeople/UniversityProject
Спасибо за помощь.
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
Да просто надо писать Include чтобы связанные сущности загружались. Это превратится в join на стороне sql. По умолчанию загрузка связанных сущностей отключена.
public async Task<Teacher> GetTeacher(Guid teacherId)
        {
            var teacher = await _uniDbContext
                                        .Teachers
                                        .Include(x => x.Cources)
                                        .FirstOrDefaultAsync(t => t.Id == teacherId);
            return teacher;
        }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы