0

MVC 4 を学習しています。EF5 を使用してデータベースの最初のプロジェクトを作成しました。編集ビューで、製品番号を顧客に追加したいと考えています。保存を押すと、以下のメッセージが表示されます。製品テーブルの製品番号がnullのため、更新できないと思います。これを回避できますか?編集コントロールを追加しました

public ActionResult Edit(int id = 0)
    {
        UserProfile userprofile = db.UserProfiles.Find(id);
        if (userprofile == null)
        {
            return HttpNotFound();
        }
        //ViewBag.userId = new SelectList(db.Devices, "DeviceID", "DeviceIMEI", userprofile.UserId);THIS CREATES A NEW ENTRY IN USERPROFILE TABLE

            ViewBag.Device_DeviceID = new SelectList(db.Devices, "DeviceID", "DeviceIMEI", userprofile.Device);
            ViewBag.ShippingDetails_ShippingDetailsID = new SelectList(db.ShippingDetails, "ShippingDetailsID", "Address1", userprofile.ShippingDetails_ShippingDetailsID);
            return View(userprofile);

    }

    //
    // POST: /User/Edit/5

    [HttpPost]
    public ActionResult Edit(UserProfile userprofile)
    {
        if (ModelState.IsValid)
        {
            db.Entry(userprofile).State = EntityState.Modified;
            db.SaveChanges();

            return RedirectToAction("Index");
        }
        //ViewBag.userId = new SelectList(db.Devices, "DeviceID", "DeviceIMEI", userprofile.UserId);
        ViewBag.Device_DeviceID = new SelectList(db.Devices, "DeviceID", "DeviceIMEI", userprofile.Device);
        ViewBag.ShippingDetails_ShippingDetailsID = new SelectList(db.ShippingDetails, "ShippingDetailsID", "Address1", userprofile.ShippingDetails_ShippingDetailsID);
        return View(userprofile);
    }

「ストアの更新、挿入、または削除ステートメントは、予期しない数の行 (0) に影響を与えました。エンティティが読み込まれてから、エンティティが変更または削除された可能性があります。ObjectStateManager エントリを更新してください」

4

3 に答える 3

0

ビューからコントローラーにId渡さないようです。UserProfile追加する必要があります

@Html.HiddenFor(モデル => モデル.Id)

ビュー内のフォームに

于 2013-06-10T18:06:41.373 に答える
0

これを試して:

if (ModelState.IsValid)
{
    db.UserProfiles.Attach(userProfile);
    db.SaveChanges();

    return RedirectToAction("Index");
}
于 2013-06-10T14:42:25.977 に答える
0

エンティティ フレームワークから切り離されたビュー モデルを投稿し、変更されたことを EF に伝えようとしています。代わりに、このようなことを試してください。

var obj = yourContext.UserProfiles.Single(q=>q.Id==userProfile.Id);
obj = userprofile;  // ... Map userprofile to the tracked object, obj
yourContext.SaveChanges();
于 2013-06-10T14:25:07.573 に答える