Как редактировать объекты службы данных WCF с помощью ASP.NET MVC 2? - PullRequest
0 голосов
/ 21 июня 2010

Я не хочу вставлять в контроллер больше кода, чем нужно.

Это работает:

    //
    // 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 ]

1 голос
/ 23 июня 2010

Догадываясь по вашему коду, набор сущностей на самом деле называется "Обязанности". Итак, ваш код должен выглядеть так: // // 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.

1 голос
/ 21 июня 2010

попробуйте это может работать:

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

Это сообщит контексту данных, что каждое свойство обновлено.

...