나는 그들이 모델EF 코드 첫 많은 업데이트에 많은
public class Doctor
{
public int Id { get; set; }
[Required]
public string Fullname { get; set; }
public virtual List<Speciality> SelectedSpecialities { get; set; }
public virtual List<Speciality> AllSpecialities { get; set; }
public virtual List<int> PostedSpecialities { get; set; }
public Doctor()
{
SelectedSpecialities = new List<Speciality>();
PostedSpecialities = new List<int>();
}
}
전문 모델
public class Specialty
{
public int Id { get; set; }
[Required]
public string Title { get; set; }
public virtual List<Doctor> Doctors { get; set; }
}
를`와 관련된 많은 - 투 - many`
의사 두 개의 모델을 가지고
나는 또한 많은 관계를 생성하는이 유창한 코드를 가지고있다.
modelBuilder.Entity<Speciality>().HasMany(x => x.Doctors).WithMany(x => x.SelectedSpecialities).Map(x =>
{
x.ToTable("DoctorsSpecialities");
x.MapLeftKey("SpecialityId");
x.MapRightKey("DoctorId");
});
내가 Doctor` 잘`추가 할 수 있습니다하지만 난에`Update` 의사의 요리를 시도 할 때 EF 이전 관계를 제거하지 않는 것 같습니다.
나는 (1,2) 및 (1,3)을 가지고 있고이를 (1,1)로 업데이트하려는 경우 (1,2) 및 (1,3) 행을 제거하지 않고 결국 (1,1) (1,2) (1,3)이됩니다.
업데이트 방법
[HttpPost]
public ActionResult Add(Doctor m)
{
if (ModelState.IsValid)
{
context.Entry(m).State = System.Data.Entity.EntityState.Modified;
m.SelectedSpecialities.Clear();
// the line below returns a List<Specialty> of selected pecialties
m.SelectedSpecialities = context.Specialities.Where(x => m.PostedSpecialities.Contains(x.Id)).ToList();
context.SaveChanges();
return RedirectToAction("Index");
}
return View();
}
저는 전문가가 아니지만 이전 레코드 [(1,2) 및 (1,3)]을 삭제하고 새 레코드 [(1,1)]를 삽입하거나 코드를 업데이트한다고 말하지는 않습니다 기록 [(1,2)]에서 [(1,1)]. 새 레코드를 삽입하는 코드를 작성하는 중입니다. –
EF는 내 모델을 데이터베이스에 바인딩하여 해당 행을 삭제할 것이라고 생각합니다. 내가 그 행을 내 자신으로 지우고 싶어도 어떻게 쓰는지 모르겠다. – mhesabi