C#MVC EntityState可以多次删除和更新

时间:2016-03-10 11:57:56

标签: c# asp.net-mvc entity-framework model-view-controller many-to-many

我对C#MVC EntityState没有太多的了解,我通常使用IT基础架构,但我开始创建一个新程序,我需要帮助才能解决这个问题。

我有这个数据库: 专业公司 身份证号码 名称描述 ...

专业人士可以在一家或多家公司工作,公司可以拥有一名或多名专业人员。

我的ProfessionalController.cs代码:

   public ActionResult Edit([Bind(Include = "ID,Name,...")] Profissional profissional, List<int> companiesList)
   {

       if (ModelState.IsValid){

           if (companiesList != null){
               List<Companies> lista = new List<Companies>();
               foreach (int ID in companiesList)
                {
                    lista.Add(db.Companies.Find(ID));
                }

               var profissionalN = db.Profissional.Find(profissional.ID);
               var needDelete = profissionalc.Companies.Except(lista).ToList();
               var needCreate = lista.Except(profissionalc.Companies).ToList();

               profissional.Companies.Clear();
               db.Entry(profissionalN).State = EntityState.Detached;
               db.Entry(profissional).State = EntityState.Modified;

               foreach (Companies convenio in needCreate){
                   profissional.Companies.Add(convenio);
               }
               foreach (Companies convenio in needDelete){
                   profissional.Companies.Remove(convenio);
               }
           }

           db.Entry(profissional).State = EntityState.Modified;
           db.SaveChanges();
           return RedirectToAction("Index");

       }
       return View(profissional);
   }

我可以将专业人士添加到公司,但我无法删除。

任何人都可以帮助我吗?

我还尝试使用以下代码删除,执行白名:

    public void RemoveCompanies(int profissionalID, int companyID)
    {
        var profissional2 = db.Profissional.FirstOrDefault(x => x.ID == profissionalID);
        var company2 = db.Company.FirstOrDefault(x => x.ID == companyID);
        profissional2.Company.Remove(companyID);
        db.Entry(profissional2).State = EntityState.Modified;
        db.SaveChanges();
    }

1 个答案:

答案 0 :(得分:0)

您从上下文中分离了'profissional'变量。在分离操作期间,不会强制执行标识关系中的级联删除指令和引用约束。即您删除的公司将不会被强制执行,因为当时'profissional'变量已被分离。

尝试删除db.Entry(profissionalN).State = EntityState.Detached;行。