Sql server 如何添加/更新/删除n-n表?
我的SQL Server数据库中有以下表: 在我的Sql server 如何添加/更新/删除n-n表?,sql-server,asp.net-mvc,entity-framework,Sql Server,Asp.net Mvc,Entity Framework,我的SQL Server数据库中有以下表: 在我的ASP.NET MVC应用程序中,我为每个医疗管理诊所。因此,假设医疗ID 1可以有N个相关的诊所,例如诊所ID 5、8、10 以下是我在控制器操作中的尝试: if (ModelState.IsValid) { Medicals medical = mapper.Map<MedicalViewModel, Medicals>(medicalViewModel); // medical ctx.Entry(m
ASP.NET MVC
应用程序中,我为每个医疗
管理诊所。因此,假设医疗ID 1
可以有N个相关的诊所,例如诊所ID 5、8、10
以下是我在控制器操作中的尝试:
if (ModelState.IsValid)
{
Medicals medical = mapper.Map<MedicalViewModel, Medicals>(medicalViewModel);
// medical
ctx.Entry(medical).State = medical.ID == 0 ? EntityState.Added : EntityState.Modified;
ctx.SaveChanges();
// relationships medical/clinics
foreach (var clinic in medicalViewModel.ClinicsList)
{
Clinics clinics = new Clinics() { ID = clinic.ID };
// delete
if (!clinic.IsChecked)
{
medical.Clinics.Remove(clinics);
}
// add/update
else
{
medical.Clinics.Add(clinics);
}
}
ctx.SaveChanges();
}
if(ModelState.IsValid)
{
Medicals medical=mapper.Map(medicalViewModel);
//医学的
ctx.Entry(medical).State=medical.ID==0?EntityState.Added:EntityState.Modified;
ctx.SaveChanges();
//与医疗/诊所的关系
foreach(医学模型中的var clinic.ClinicsList)
{
诊所=新诊所(){ID=clinic.ID};
//删除
如果(!clinic.IsChecked)
{
医疗。诊所。移除(诊所);
}
//添加/更新
其他的
{
医疗。诊所。添加(诊所);
}
}
ctx.SaveChanges();
}
但它不能删除或添加/更新
我错在哪里?我没有由实体框架
生成的临床医学
表,因此我想我需要通过医学
访问,以下是我认为您需要执行的操作:
if (ModelState.IsValid)
{
Medicals medicalEntity;
if(medicalViewModel.ID == 0)
{
medicalEntity = ctx.Set<Medicals>().Add(new Medicals());
}
else
{
// retrieve existing entity
medicalEntity = ctx.Set<Medicals>().Find(medicalViewModel.ID);
if(medicalEntity == null)
// log and throw exception may be?
}
// apply new changes to existing entity
medicalEntity = mapper.Map<MedicalViewModel, Medicals>(medicalViewModel, medicalEntity);
// relationships medical/clinics
foreach (var clinicViewModel in medicalViewModel.ClinicsList)
{
var clinicEntity = medicalEntity.Clinics.FirstOrDefault(x => x.ID == clinicViewModel.ID);
// delete
if (!clinicViewModel.IsChecked)
{
medicalEntity.Clinics.Remove(clinicEntity);
}
else
{
if(clinicEntity == null) // add
{
medicalEntity.Clinics.Add(ctx.Set<Clinics>().Find(clinicViewModel.ID));
}
else
{
// update
}
}
}
ctx.SaveChanges();
}
if(ModelState.IsValid)
{
医学性;
如果(medicalViewModel.ID==0)
{
medicalEntity=ctx.Set().Add(newMedicals());
}
其他的
{
//检索现有实体
medicalEntity=ctx.Set().Find(medicalViewModel.ID);
if(medicalEntity==null)
//日志和抛出异常可能是什么?
}
//将新更改应用于现有实体
medicalEntity=mapper.Map(medicalViewModel,medicalEntity);
//与医疗/诊所的关系
foreach(medicalViewModel.ClinicsList中的var clinicViewModel)
{
var clinicEntity=medicalEntity.Clinics.FirstOrDefault(x=>x.ID==clinicViewModel.ID);
//删除
如果(!clinicViewModel.IsChecked)
{
医疗。诊所。移除(临床医生实体);
}
其他的
{
if(clinicEntity==null)//添加
{
medicalEntity.Clinics.Add(ctx.Set().Find(clinicViewModel.ID));
}
其他的
{
//更新
}
}
}
ctx.SaveChanges();
}
在nornam sql中,您必须先删除它们之间的链接,然后才能链接它们,这意味着在删除ClinicsMedical之前先删除ClinicsMedical。我正在尝试做的是,直接使用代码和实体关系:)很长时间没有使用EF,它不是为您创建了ClinicsMedical类吗?也许你可以先删除该类,然后再删除关系。他不,没有:)我不需要删除医疗或诊所,但它的关系(例如与医疗相关的诊所,或添加新的诊所)。它似乎工作得很完美!注意:输入错误FirstOfDefault
,它的“或”默认值;)