2012-03-19 12 views
1

私はASP.Net MVC C#Movie Databaseチュートリアルを実行していましたが、何が何をするのかを知るためのマイナーな変更をいくつか行いました。私は初心者だと付け加えます。個別のデータベースレコードをIDで更新する方法

小さなフォームとボタンのあるページがあります。フォームに記入して送信すると、フォームのデータを送信すると、データベーステーブルの所定のレコードが更新されます。

コントローラコードでは、どのように個々のレコードを指定しますか?テーブルに1つのレコードしかないと仮定すると、それは新しい情報で定期的に更新されますか?

私はコード内の2行に何かあると思う:

  db.Entry(data).State = EntityState.Modified; 
      db.SaveChanges(); 

私はちょうどそれが更新されるように、個別のレコードを指定するかどうかはわかりませんか?レコードにはID番号が付きます(たとえば、IDは "1"になります)。

、そのまま更新を行いますコードのビット:

// POST: /Data/Update/ 

    [HttpPost] 
    public ActionResult Update(Data data) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Entry(data).State = EntityState.Modified; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(data); 
    } 
+0

は動作しないことにしていますか? –

+0

タイトルに「C#MVC」などのプレフィックスを付けないでください。それがタグのためのものです。 –

+0

チュートリアルは何ですか? http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-anentity-framework-data-model-for-an-asp-net-mvc-application説明詳しくは、チュートリアルを完了してください。 – RickAndMSFT

答えて

1

EFはデータベースに更新するために、どの行かを知る必要があります。 「ID」プロパティが要求からバインドされていなかった場合、あなたのコード内で明示的に設定する必要があります。

if (ModelState.IsValid) 
    { 
     data.Id = 1; //EF need to know which row to update in the database. 
     db.Entry(data).State = EntityState.Modified; 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
+0

ドミトリーさん、残念ながら、何らかの理由でレコードを更新していない(エラーもなく、ボタンをクリックするだけで実際に何もしなかった)。 Visual Web Developerでプロジェクトをビルドするときにエラーはありません。それが役に立つかもしれない場合に使用されるビューで使用されるコードを提供できますか? (データベースは "data.sdf"と呼ばれ、レコードのあるデータベースのテーブルは "Data"と呼ばれています - 残念ですが、これは正しいとは限りませんが、まだ学習中です...) – Harry

+0

デバッガを実行しようとしてくださいif(ModelState.IsValid)行にブレークポイントを設定して、コードがまったく実行されているかどうかを確認します。デバッガでコードを歩み、エンティティのプロパティ値を確認します。彼らは正しいのですか? –

+0

ドミトリーさん、ありがとう、コードが実行されているようには見えません。私は "Update"(ビューフォルダ "Data/Update"にあります)というViewを持っています。このビューはHTMLとフォームを保持し、ボタンは変更をコミットしますが、ボタンは何もしないように見えます。ボタンには単に次のコードがあります。コードが呼び出されていないようです...今は本当に失われています! lol – Harry