2013-08-25 2 views
1

Добрый день, я написать asp.net mvc3 проект с пачкой SQL Server 2012 & EF, я использовать DropDownList для создания & запись обновлений в базе данных. Все работает нормально, когда я добавляю страницу, но когда я пытаюсь редактировать, он не может сохранить изменения. Я стараюсь принимать brackpoint и в режиме отладки Inner исключения сказали, чтоDropDownList в ASP.NEt MVC Редактирование метода

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries. 

Это мой код:

[Table("Pages", Schema = "myprojectname")] 
[Bind(Exclude = "PageId")] 
public class Page 
{ 
    public int PageId { get; set; } 
    public string PageContent { get; set; } 
    public int PageTitleId { get; set; } 

    public virtual PageTitle PageTitle { get; set; } 
} 

[Table("PageTitles", Schema = "myprojectname")] 
public class PageTitle 
{ 
    public int PageTitleId { get; set; } 
    public string Title { get; set; } 

    public List<Page> Pages { get; set; } 
} 

public DbSet<Page> Pages { get; set; } 

public DbSet<PageTitle> PageTitles { get; set; } 

public ActionResult PageEdit(int id) 
    { 
     Page page = context.Pages.Find(id); 
     ViewBag.PageTitleId = new SelectList(context.PageTitles, "PageTitleId", "Title", page.PageTitleId); 
     return View(page); 
    } 

    [HttpPost] 
    [ValidateInput(false)] 
    public ActionResult PageEdit(Page page) 
    { 
     try 
     { 
      if (ModelState.IsValid) 
      { 
       context.Entry(page).State = EntityState.Modified; 
       context.SaveChanges(); 
       return RedirectToAction("Index", "Administrator"); 
      } 
     } 
     catch (DataException) 
     { 
      ModelState.AddModelError("", "Unable to save changes. Please try again"); 
     } 
     ViewBag.PageTitleId = new SelectList(context.PageTitles, "PageTitleId", "Title", page.PageTitleId); 

     return View(page); 
    } 

@model BalticCenter.Web.Models.Entities.SitePages.Page 

@{ 
    ViewBag.Title = "PageEdit"; 
    Layout = "~/Views/Shared/_AdministratorLayout.cshtml"; 
} 

<h2>PageEdit</h2> 
@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 

<fieldset> 
    <legend>Page</legend> 

    @Html.HiddenFor(x => x.PageId) 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.PageTitleId, "PageTitle") 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownList("PageTitleId", String.Empty) 
     @Html.ValidationMessageFor(model => model.PageTitleId) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.PageContent) 
    </div> 
    <div class="editor-field"> 
     @Html.TextAreaFor(model => model.PageContent) 
     @Html.ValidationMessageFor(model => model.PageContent) 
    </div> 

    <p> 
     <input type="submit" value="Edit" /> 
    </p> 
</fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

Я не вижу свою ошибку. Есть идеи?

+0

Это может помочь: [Entity Framework: «Сохранить заявление, вставить или удалить заявление повлияло на неожиданное количество строк (0).»] (Http: // stackoverflow .com/д/1836173/690329) – afzalulh

ответ

0

Вы ваш класс Page украшено [Bind (Exclude = "PageId")]

Это означает, что при установке EntityState Изменена Юридическое лицо не имеет primeary ключ (идентификатор)

context.Entry(page).State = EntityState.Modified; 
context.SaveChanges(); 

И поэтому база данных не может сохранить изменения.