0
我,他们都与'多到many`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; }
}
两款车型
我也有这个流利的代码来创建多对多的关系。
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();
}
我不是c#专家,但我认为你不是告诉代码删除以前的记录[(1,2)和(1,3)]并插入新的[(1,1)]或只是更新记录[(1,2)]到[(1,1)]。您只是编写代码来插入新记录。 –
我认为EF应该将我的模型绑定到数据库,并且会负责删除这些行。 即使我想通过我自己删除这些行,我不知道如何。 – mhesabi