0

昨夜遅くに投稿した質問について誰か助けてくれませんか。私はまだ編集方法にこだわっています。以下のリンク:

昨夜の質問

投稿されたものに加えて、私も試しました:

HttpPost 編集:

[HttpPost]
    public ActionResult Edit(MensPlayer mensPlayer)
    {
        if (ModelState.IsValid)
        {
            //Save Player
            _dataSource.Entry(mensPlayer).State = EntityState.Modified;
           _dataSource.Save();

           TempData["message"] = string.Format("{0} has been saved", mensPlayer.Name);
            return RedirectToAction("Detail", "MensPlayer", new {id = mensPlayer.Id});
        }
        return View(mensPlayer);
    }

上記のメソッドに関する問題はEntry(mensPlayer).State.Entry() でコードがビルドされず、このメソッドがどこで継承されているのかわかりません。これは MVC-Music-Store サンプルで使用されているテクニックです。

Pro ASP.NET MVC3 Framework book からこの手法も試しました。

[HttpPost]
    public ActionResult Edit(MensPlayer mensPlayer)
    {
        if (ModelState.IsValid)
        {
            //Save Player
           _dataSource.Save();

           TempData["message"] = string.Format("{0} has been saved", mensPlayer.Name);
            return RedirectToAction("Detail", "MensPlayer", new {id = mensPlayer.Id});
        }
        return View(mensPlayer);
    }

この手法は構築されますが、変更がデータベースに保存されないようです。

どうすればそれを機能させることができますか? 私は何が欠けていますか?

ソリューション全体を見る必要がある場合は、ソース コード全体が GitHub にあります。

GitHub

以下の Slauma の助けを借りて、次のように変更しました。

void Update();IDataSource に追加し、Db クラスに以下を追加しました

 void IDataSource.Update()
    {
        Entry(MensPlayers).State = EntityState.Modified;
    }

HttpPost 編集:

[HttpPost]
    public ActionResult Edit(MensPlayer mensPlayer)
    {
        if (ModelState.IsValid)
        {
            //Save Player
            _dataSource.Update();
           _dataSource.Save();

           TempData["message"] = string.Format("{0} has been saved", mensPlayer.Name);
            return RedirectToAction("Detail", "MensPlayer", new {id = mensPlayer.Id});
        }
        return View(mensPlayer);
    }

すべてのビルドですが、このエラーが発生します The entity type DbSet`1 is not part of the model for the current context.

これは、次のことに由来すると考えられています。

void IDataSource.Update()
    {
        Entry(MensPlayers).State = EntityState.Modified;
    }
4

1 に答える 1

0

上記のコメントでSlaumaの助けを借りて、これは彼が私に提案したことであり、うまくいきます。

IDataSource インターフェイスに追加:

 void Update(MensPlayer mensPlayer);

Db クラスに実装された更新:

void IDataSource.Update(MensPlayer mensPlayer)
    {
        Entry(mensPlayer).State = EntityState.Modified;
    }

アクションの編集:

[HttpPost]
    public ActionResult Edit(MensPlayer mensPlayer)
    {
        if (ModelState.IsValid)
        {
            //Save Player
            _dataSource.Update(mensPlayer);
           _dataSource.Save();

           TempData["message"] = string.Format("{0} has been saved", mensPlayer.Name);
            return RedirectToAction("Detail", "MensPlayer", new {id = mensPlayer.Id});
        }
        return View(mensPlayer);
    }

そして、私は Save で行ったように、DbSet 全体に Update を実装できると仮定していましたが、すべて正常に動作します。

于 2012-10-18T22:03:53.280 に答える