Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何添加/更新/删除n-n表?_Sql Server_Asp.net Mvc_Entity Framework - Fatal编程技术网

Sql server 如何添加/更新/删除n-n表?

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

我的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(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
,它的“或”默认值;)