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

wcf data services savechanges():“找不到该段的资源”

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

    我的台词 ctx.SaveChanges(); 在我的控制器中 DutyController.cs 当我试图编辑我的职责对象时引发以下异常。

    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>
    

    我的“编辑职责”视图包括一个下拉列表的场合。occasionid guid在提交时成功绑定到工作模型。

    模特儿

    [MetadataType(typeof(DutyMetadata))]
    public partial class Duty
    {
        private class DutyMetadata
        {
            ...
    
            [Required]
            [UIHint("OccasionId")]
            [Display(Name = "Occasion")]
            public object OccasionId { get; set; }
        }
    }
    

    视图\职责\编辑.aspx

    <%: Html.EditorForModel() %>
    

    视图\共享\显示模板\occasionid.ascx

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Guid>" %>
    <%: Html.DropDownList(string.Empty, new SelectList(ViewData["occasions"] as IEnumerable<Web.VolunteerData.Occasion>, "Id", "Designation", Model), "Select Occasion")%>
    

    控制器\dutycontroller.cs

    //
    // GET: /Duty/Edit/5
    
    public ActionResult Edit(Guid id)
    {
        var Model = (from Duty d in ctx.Duties where d.Id == id select d).Single();
        ViewData["occasions"] = from Occasion o in ctx.Occasions orderby o.Designation select o;
        return View(Model);
    }
    
    //
    // POST: /Duty/Edit/5
    
    [HttpPost]
    public ActionResult Edit(Duty Model)
    {
        ctx.AttachTo("Duty", Model);
        ctx.UpdateObject(Model);
        ctx.SaveChanges();
        return RedirectToAction("Index");
    }
    

    为什么savechanges()会导致“找不到段的资源…”异常?

    有没有更好的方法让我做我想做的?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Vitek Karas MSFT    14 年前

    我认为这是另一个问题的副本,但无论如何。问题出在Attachto调用中。该方法的第一个参数是实体集的名称(不是实体类型)。在您的情况下,实体集似乎被称为“职责”。所以只需使用“职责”作为attachto的参数,它就可以工作了。 下一次请发布整个异常消息,因为这很可能包括有问题的“段”的名称,并将使问题更加清楚。