2009-06-29 12 views
3

どういうわけか、この更新コードが動作していない。ここでこのLINQ to SQL更新クエリが機能しない理由は何か。 。

は私のコントローラのコードである:ここで

private UserRepository repo = new UserRepository(); 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(int id, UserInfo user_) 
    { 
     try 
     { 
      repo.UpdateUser(user_); 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

は(UserRepository)の上に使用されているレポコードです

private UsersDataContext db = new UsersDataContext(); 

    public void UpdateUser(UserInfo user_) 
    { 
     UserInfo origUser = GetUser(user_.Id); 
     origUser.First = user_.First; 
     origUser.Last = user_.Last; 
     origUser.City = user_.City; 
     origUser.Country = user_.Country; 
     origUser.State = user_.State; 
     origUser.Street_Address = user_.Street_Address; 

     db.SubmitChanges(); 
    } 

    public UserInfo GetUser(int id_) 
    { 
     return db.UserInfos.SingleOrDefault(d => d.Id == id_); 
    } 

EDIT:

すべてのデバッグが正常に実行されている(例外はありません)が、インデックスにリダイレクトされると、更新からの変更があったときにデータが更新されていません。

+1

例外があるのを見てみましたか? – womp

+0

「働いていない」ことについて詳しく説明できますか?アクションメソッドは起動しませんか?データベースメソッドは起動しませんか?ブレークポイントを設定していて、もしuser_の内容を確認していますか? – KingNestor

+0

私はこれらの回答で投稿を更新しました – leora

答えて

1

私はちょうど次へuserrepositoryを変更:

private UsersDataContext db = new UsersDataContext(); 

public void UpdateUser(UserInfo user_) 
{ 
    UserInfo origUser = db.UserInfos.SingleOrDefault(d => d.Id == id_); 
    origUser.First = user_.First; 
    origUser.Last = user_.Last; 
    origUser.City = user_.City; 
    origUser.Country = user_.Country; 
    origUser.State = user_.State; 
    origUser.Street_Address = user_.Street_Address; 

    db.SubmitChanges(); 
} 

私がしたので、すべてがGETUSER()メソッドをインラインで移動し、それが働きました。

赤ちゃんだったかもしれないし、ちょうどキャッシングの問題でした。 。

+0

あなたがそれを見つけられたらうれしいですが、なぜこれがうまくいくのか、あなたの前のコードは理解できません。あなたがしたことは、そのゲッタをラップする関数を削除することでした... – Peter

0

あなたはUserInfoをどのように定義したかについて言及していませんが、それは構造体かクラスですか?

構造体の場合、GetUserから返すと新しいオブジェクトが作成されるため、データベースオブジェクトは更新されず、そのローカルコピーのみが更新されます。

GetUserをインラインに移動すると、この一時コピーの作成が回避され、その理由が考えられます。あなたは

public void GetUser(int id_, out UserInfo user_) 
{ 
    user_ = db.UserInfos.SingleOrDefault(d => d.Id == id_); 
} 

ような何かを行うことができます私の知る限り

あなたは、この

public void UpdateUser(UserInfo user_) 
{ 
    UserInfo origUser; 
    GetUser(user_.Id, out origUser); 
    origUser.First = user_.First; 
    origUser.Last = user_.Last; 
    origUser.City = user_.City; 
    origUser.Country = user_.Country; 
    origUser.State = user_.State; 
    origUser.Street_Address = user_.Street_Address; 

    db.SubmitChanges(); 
} 
0

たぶん、あなた無効オブジェクトトラッキングのようにそれを呼ぶだろうか?

関連する問題