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

如何使用ASP.NET MVC 2编辑WCF数据服务对象?

  •  0
  • Zack Peterson  · 技术社区  · 15 年前

    我不想把更多的代码放进我的控制器。

    作品:

        //
        // POST: /Duty/Edit/5
    
        [HttpPost]
        public ActionResult Edit(Duty Model)
        {
            Duty Attached = (from Duty d in ctx.Duties
                             where d.Id == Model.Id
                             select d).Single();
            Attached.Designation = Model.Designation;
            Attached.Instruction = Model.Instruction;
            Attached.OccasionId = Model.OccasionId;
            Attached.Summary = Model.Summary;
            ctx.UpdateObject(Attached);
            ctx.SaveChanges();
            return RedirectToAction("Index");
        }
    

    但是,我不想把每个属性都打出来。

    这个

        //
        // POST: /Duty/Edit/5
    
        [HttpPost]
        public ActionResult Edit(Duty Model)
        {
            ctx.AttachTo("Duty", Model);
            ctx.UpdateObject(Model);
            ctx.SaveChanges();
            return RedirectToAction("Index");
        }
    

    它抛出一个

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
      <code></code>
      <message xml:lang="en-US">Resource not found for the segment 'Duty'.</message>
    </error>
    

    为什么? 怎么 应该 我写这个?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Vitek Karas MSFT    15 年前

    从代码中猜测实体集实际上被称为“职责”。所以你的代码应该是这样的: //职务/职务/编辑/5

    [HttpPost] 
    public ActionResult Edit(Duty Model) 
    { 
        ctx.AttachTo("Duties", Model); 
        ctx.UpdateObject(Model); 
        ctx.SaveChanges(); 
        return RedirectToAction("Index"); 
    } 
    

    (AttachTo方法的第一个参数是实体集名称,而不是实体类型的名称。) 请注意,要使其工作,必须确保服务器上已经存在有问题的实体(即具有相同键属性值的实体)。这将向该实体发出PUT请求,如果该实体不存在,它将失败,返回404。

        2
  •  1
  •   VoodooChild    15 年前

    试试这个可能有用:

    ctx.AttachUpdated(Model);
    ctx.SaveChanges();
    

    这将告诉数据上下文每个属性都已更新。

    推荐文章