0

ユーザー情報でデータベースを更新する方法に問題があります。HttpGet ではビュー モデルを使用してデータの整合性を確保し、HttpPost ではデータが返されて存在します。(ブレークポイントでいくつかのチェックを実行し、すべてが正しいユーザーデータを保持していたはずです)

ただし、.Save() メソッドを実行すると、この情報は DB に保存されません。

データを手動で変更して正しいデータベースを指しているかどうかを確認したところ、リスト ビューに問題なく表示されます。何かが足りない、何がなんだか分からない ><

以下は、関連するすべてのビューモデルにフォームデータがあるコードですが、保存されません!

    [HttpPost]
    public ActionResult HouseCreate(CreateHouseViewModel viewModel)
    {

        if (ModelState.IsValid)
        {          
            var house = new House();
            house.address = viewModel.address;
            house.postCode = viewModel.postCode;
            house.noOfDisputes = viewModel.noOfDisputes;
            _db.Save();

          return RedirectToAction("House");
        }
        return View(viewModel);
    }

家は私の家のデータベースのオブジェクトであり、正しい主キーが配置されて正しくモデル化されています (データベース ビューアーでこれを再確認してください)。

void DataSources.Save()
    {
        SaveChanges();
    }

エラーが発生しないため、さらに悪化します。

4

4 に答える 4

4
using (var context = new UnicornsContext())
{
    var unicorn = new Unicorn { Name = "Franky", PrincessId = 1};

    context.Unicorns.Add(unicorn); // your missing line

    context.SaveChanges();
}

ソース

于 2013-01-29T18:42:38.300 に答える
0

私が見つけたこれは、データベースにアイテムを追加するためのはるかに信頼できる手段です。

// Note: db is your dbContext, model is your view model

var entity = db.Entry(model); // Required to attach the entity model to the database
                              //   you don't need the "var entity = " but its useful
                              //   when you want to access it for logging
db.Entry(model).State = EntityState.Added; // Required to set the entity as added - 
                                           //   modified does not work correctly

db.SaveChanges();             // Finally save
于 2013-01-29T19:55:04.940 に答える
0

あなたの「_db」オブジェクトは、エンティティフレームワークであると思います。これにはコレクションがあり、おそらく _db.Houses ですか?それにオブジェクトを追加する必要があります。

于 2013-01-29T18:40:13.863 に答える
0

Entity Framework を使用しているように見えるので、モデルが更新されたことを Entity Framework に通知する必要があります。HttpGet メソッドと HttpPost メソッドの間で、モデルはデータベース コンテキストから切り離されます。変更を保存できるように、次のコードがコンテキストに再アタッチするように機能すると思います。

context.Entry(myEntity).State = EntityState.Modified;
context.MyEntities.Attach(myModel);
context.SaveChanges();

編集:これが更新するDB内の既存のレコードであると仮定して、再接続メソッド部分を追加するのを忘れました。

于 2013-01-29T19:05:53.740 に答える