代码之家  ›  专栏  ›  技术社区  ›  Zack Peterson

WCF数据服务与EF4的多对多关系

  •  2
  • Zack Peterson  · 技术社区  · 14 年前

    一个工人可以有零个或多个职责。一个职务可以没有或有更多的工作人员。

    //
    // POST: /Duty/Edit/5
    
    [HttpPost]
    public ActionResult Edit(Duty Model, FormCollection collection)
    {
        ctx.AttachTo("Duties", Model);
        ctx.UpdateObject(Model);
    
        // handle checkboxes
        ctx.LoadProperty(Model, "Workers");
        foreach (Worker w in ctx.Workers)
        {
            bool isChecked = collection[w.Id.ToString()].Contains("t");
            bool wasChecked = Model.Workers.Contains(w);
            if (isChecked && !wasChecked)
            {
                Model.Workers.Add(w);
            }
            else if (wasChecked && !isChecked)
            {
                Model.Workers.Remove(w);
            }
        }
    
        ctx.SaveChanges();
        return RedirectToAction("Index");
    }
    

    这个 Add() Remove()

    更新

    w.Duties.Add(Model); 这也不管用。

    1 回复  |  直到 9 年前
        1
  •  5
  •   Zack Peterson    14 年前

    使用方法 AddLink DeleteLink .

    //
    // POST: /Duty/Edit/5
    
    [HttpPost]
    public ActionResult Edit(Duty Model, FormCollection collection)
    {
        ctx.AttachTo("Duties", Model);
        ctx.UpdateObject(Model);
    
        // handle checkboxes
        foreach (Worker w in ctx.Workers.Expand("Duties"))
        {
            bool isChecked = collection[w.Id.ToString()].Contains("t");
            bool wasChecked = w.Duties.Contains(Model);
            if (isChecked && !wasChecked)
            {
                ctx.AddLink(Model, "Workers", w);
            }
            else if (wasChecked && !isChecked)
            {
                ctx.DeleteLink(Model, "Workers", w);
            }
        }
    
        ctx.SaveChanges();
        return RedirectToAction("Index");
    }
    

    看到了吗 创建和修改关系链接 Updating the Data Service (WCF Data Services)