교사 (교사와 모든 지정된 강좌를 편집시 목록 상자에 표시하고자합니다 (다 대 다 관계 : 강좌, 교사 및 CourseTeacher). (이미 선택한 과목을 강조 표시하고 사용자가 선택을 변경하면 데이터베이스에 반영됩니다).EntityFramework에서 다 대다 저장하기
내 문제는 Get 메소드에서 작동하지만, 교사와 관련 코스를 업데이트하기 위해 게시 할 때 모든 코스가 지정되어 있지만 자동으로 (교사 정보를 업데이트하지만 선택된 코스는 업데이트하지 않음) 게시하지 않습니다. 개체에.
저는 MVC를 처음 사용하기 때문에 모델이 올바른지 확실하지 않습니다. 하지만 문제는 post 메서드에있는 것 같아요. (코드의 마지막 부분은 내 의견을 참조하십시오).
명확해야합니다. 나는 이미 코스리스트를 가지고있다. 나는 그 (것)들을 몇몇 교사와 관련시키고 싶다.
지금까지했던 어떤 : 뷰 모델
를public class TeacherEditor
{
public Teacher Teacher { get; set; }
public int[] SelectedCourseIds { get; set; }
public MultiSelectList Courses { get; set; }
}
교사 모델 :
public class Teacher
{
public int TeacherID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<Course> Courses { get; set; }
public Teacher()
{
Courses = new HashSet<Course>();
}
}
보기 :
<div class="editor-field">
@Html.ListBoxFor(model=>model.SelectedCourseIds, Model.Courses)
</div>
컨트롤러 GET :
public ActionResult Edit(int id = 0)
{
var teacher = db.Teachers.Include(x=>x.Courses).Where(x=>x.TeacherID==id).SingleOrDefault();
if (teacher==null)
{
return HttpNotFound();
}
var selectedCourses = teacher.Courses.Select(x=>x.CourseID);
var model = new TeacherEditor
{
Teacher = teacher,
Courses = new MultiSelectList(db.Courses, "CourseID", "Name", selectedCourses),
SelectedCourseIds = selectedCourses.ToArray()
};
if (model == null)
{
return HttpNotFound();
}
return View(model);
}
컨트롤러 POST는 :
[HttpPost]
public ActionResult Edit(TeacherEditor teacherEditor)
{
if (ModelState.IsValid)
{
foreach (var id in teacherEditor.SelectedCourseIds)
{
Course course = db.Courses.Where(x=>x.CourseID==id).SingleOrDefault();
teacherEditor.Teacher.Courses.Add(course); //Here I'm adding courses back to Teacher object for save.
}
db.Entry(teacherEditor.Teacher).State = EntityState.Modified; /?This doesn't save records to my relationship table. Why?
db.SaveChanges();
return RedirectToAction("Index");
}
return View(teacherEditor);
}
귀하의 예제가 포함되어
같은 것을보십시오. 내가 올바르게 이해했는지 확인하기 위해 선택한 모든 코스를 선생님에게 다시 보충하려고합니다. 이미 선생님의 코스리스트에 포함되어있는 목록에있는 코스를 어떻게 설명합니까? –
@DaveA, 지금은 안됩니다. EF는 이미 존재하는 코스를 추가하는 것을 건너 뛰기에 충분히 똑똑하지만. 추가하기 전에 조건을 추가 할 수는 있지만 여전히 저장되지는 않습니다. – user194076
나는 약간의 깊이가 있습니다. EF를 꽤 많이 사용하지만 전문가는 아닙니다. 내가 충분히 긴 문제에 집중할 때 나는 그것을 해결한다. 이 경우 내 본능은 기존의 것을 첨부하거나 무시할 것입니다. 나는 현재 코스가 회원인지 아닌지 확인하기 위해 전화를 할 것입니다. –