Я действительно новичок в ASP. NET Ядро, поэтому я прошу прощения, если это глупый вопрос, но я потратил так много часов, пытаясь понять это.
У меня есть 2 модели, Teacher
и Student
. Отношения - это один учитель для многих учеников. Это бэкэнд-проект API, и я работаю над методом PUT, который может обновлять поля в обеих моделях одновременно в одном запросе.
Вот мой класс Teacher
:
public partial class Teacher
{
public Teacher()
{
Students = new HashSet<Student>();
}
public int TeacherId { get; set; }
public string Name { get; set; }
... tons of other properties ...
}
Вот мой Student
класс:
public partial class Student
{
public int Id { get; set; }
public int TeacherId { get; set; }
public string Name { get; set; }
public virtual Teacher Teacher { get; set; }
}
Вот контроллер:
[HttpPut("{id}")]
public async Task<IActionResult> PutTeachers(int id, TeacherViewModel model)
{
var result = await _service.UpdateAsync(model);
return Ok(result.Message);
}
(приведенный выше код упрощен) - принимает значение TeacherViewModel
, которое ограничивает количество возвращаемых полей - Я использовал другой класс в качестве службы для обновления
Вот класс обслуживания:
public class TeacherService
{
private readonly Repository<Teacher> _repository;
public TeacherService(DatabaseContextWrapper context)
{
_repository = new Repository<Teacher>(context);
}
public async Task<ITransactionResult> UpdateAsync(TeacherViewModel model)
{
var teacher = _repository.FindAsync(model.TeacherId).Result;
teacher.TeacherId = model.TeacherId;
teacher.Name = model.Name;
teacher.Students.Clear();
foreach(var student in model.Students)
{
teacher.Students
.Add(new Student
{
Id = Student.Id,
TeacherId = Student.TeacherId
Name = Student.Name
});```
}
}
}
Я считаю, что нужно добавить модель Student
к ученикам в соответствии с Teacher
модель, но она не повторяется. Если я закомментирую чистый код, обновление будет работать, но оно не будет пересекаться. Это просто не будет повторяться. Я думаю, что я довольно потерян в этот момент. Буду признателен за любую помощь!
Редактировать 1 (Конфигурация отношений между сущностями)
modelBuilder.Entity<Student>(entity => {
entity.HasOne(d => d.Teacher)
.WithMany(p => p.Students)
.HasForeignKey(d => d.TeacherId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("FK_Students_Teachers");
});
Это моя конфигурация