我不想再将任何代码添加到我的控制器中。
有效:
//
// 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>
为什么? 应该如何我写这个?
答案 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。