1

こんにちは、SQL Server 2012 と EF のバンドルを使用して asp.net mvc3 プロジェクトを作成しています。データベースのエントリの作成と更新にドロップダウン リストを使用しています。ページを追加するとすべて正常に動作しますが、編集しようとすると変更を保存できません。私はブレークポイントを取得しようとしましたが、デバッグモードで内部例外がそれを伝えました

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>

私は自分の間違いを見ていません。何か案は?

4

1 に答える 1

0

[Bind(Exclude = "PageId")] で装飾されたクラス Page があります

これは、EntityState を Modified に設定すると、エンティティに主キー (id) がないことを意味します。

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

そのため、データベースは変更を保存できません

于 2013-08-25T19:09:50.933 に答える