1

ASP.NET MVC 4 でコードを書きました。MVC 編集テンプレートを使用して編集フォームを作成します。これは、POST編集したデータを保存するためのコードです。

    [AcceptVerbs(HttpVerbs.Post)]
    [Authorize(Roles = "User")]
    public ActionResult Register(Models.UserBasicProfile profile)
    {
            if (ModelState.IsValid)
            {
                using (Models.SocialServicesDataContainer context = new Models.SocialServicesDataContainer())
                {
                    Models.UserBasicProfile update =
                        context.UserBasicProfiles
                        .SingleOrDefault(c => c.Id == profile.Id);
                    if (update.Id > 0)
                    {
                        profile.RegisterDate = update.RegisterDate;
                        update = profile;
                        context.SaveChanges();
                        return RedirectToRoute("User_ShowProfile_Alter", new {username = User.Identity.Name });
                    }
                    else
                    {
                        return View(profile);
                    }
            }
      }

このコードは正しく実行され、エラーはありません。ただし、ユーザー プロファイルへのリダイレクトが発生した場合、変更されたフィールドには以前の値が残っています。
私は何をすべきか ?

前もって感謝します。

4

2 に答える 2

4

profile変数がコンテキストに「接続」されていないためだと思います。コンテキストはプロファイル オブジェクトを認識しません。したがってcontext.SaveChanges()、プロファイル変数の変更を実行すると、気付かれなくなります。

を更新する必要がありupdate object with the values from profileます。または、おそらくプロファイル オブジェクトをコンテキストにアタッチします。

Entity Framework 4を保存する前にコンテキストにアタッチする方法については、この投稿を確認してください- AddObject vs Attach

于 2013-01-08T11:33:53.983 に答える
3

データベースから返されたオブジェクトのデータを実際に変更していないようです。update = profile を設定していますが、これは update 変数を逆参照するだけなので、EF によって追跡されているオブジェクトを指しなくなります。

プロファイルからすべてのプロパティ値をコピーして更新する必要があります。

于 2013-01-08T11:35:19.847 に答える