【问题标题】:C# MVC EntityState many to many delete and updateC# MVC EntityState 多对多删除和更新
【发布时间】:2016-03-10 11:57:55
【问题描述】:

我对 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();
    }

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的帮助。这是另一个不专业的变量profesisonal,我知道他们的名字很相似......没有这个我有2个专业的对象和一个错误。我可以级联更新,但不能删除。这是专业的另一个例子。
    • @PabloRogerioFagundes 确实是一个不同的名称,但您使用的是profissionalN = db.Profissional.Find(profissional.ID)。因此profissionalN.ID = profissional.ID。您正在分离具有该 ID 的实体。您也可以在将条目状态设置为已修改并保存更改之前尝试使用 db.Professional.Attach(profissional)。但我认为问题在于您正试图从一个独立实体中删除公司。
    • 非常感谢您的帮助。我删除了db.Entry(profissionalN).State = EntityState.Detached 并添加了代码db.Entry(profissional).Collection(x =&gt; x.Company).Load();
    猜你喜欢
    • 2014-09-28
    • 2012-05-25
    • 2011-03-31
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多