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

时间:2010-06-21 17:50:26

标签: c# asp.net-mvc-2 wcf-data-services

我不想再将任何代码添加到我的控制器中。

有效:

    //
    // 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");
    }

抛出 System.Data.Services.Client.DataServiceClientException:

<?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 个答案:

答案 0 :(得分:1)

试试这可能有用:

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

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

答案 1 :(得分:1)

从您的代码中猜测实体集实际上称为“职责”。所以你的代码应该是这样的:     //     // POST:/ Duty / Edit / 5

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

(AttachTo方法的第一个参数是实体集名称,而不是实体类型的名称。) 请注意,为了使其正常工作,您必须确保服务器上存在相关实体(即具有相同键属性值的实体)。这将向该实体发出PUT请求,如果它不存在,则将失败并显示404。