私は2つのプロジェクトを持っています - EDM Entity Frameworkモデルと別個のASP.NET MVCプロジェクトを含むクラスライブラリ。ASP.NET MVC 3でEF 4エンティティを更新するには?
MVCを使用してエンティティの変更を編集して保存する方法に問題があります。私のコントローラでは、私が持っている:
public class UserController : Controller
{
public ActionResult Edit(int id)
{
var rep = new UserRepository();
var user = rep.GetById(id);
return View(user);
}
[HttpPost]
public ActionResult Edit(User user)
{
var rep = new UserRepository();
rep.Update(user);
return View(user);
}
}
マイUserRepository
は、このような更新方法があります。今
public void Update(User user)
{
using (var context = new PDS_FMPEntities())
{
context.Users.Attach(testUser);
context.ObjectStateManager.ChangeObjectState(testUser, EntityState.Modified);
context.SaveChanges();
}
}
、私は編集ユーザページ上で「保存」をクリックし、パラメータuser
は2つのだけの値が含まれていますpopulated:Id、およびFirstName。私はそれを取っているのは、ビュー内の2つのプロパティのみを表示しているからです。
ユーザーのファーストネームを更新して保存したい場合は、ビューに表示されていない他のUser
プロパティについて、私は何をすると思いますか? user
オブジェクトのNULL値?
私はスタブエンティティの使用について多くのことを読んできましたが、実際には見たことのない例がないので、どこも高速になりません。つまり、EntityKeyに関連する例外が引き続き発生します。
誰かがMVCフロントエンドによって呼び出されたリポジトリクラスを使用してEF 4エンティティを更新する方法の良いチュートリアル/例を教えてくれますか?
@Jasonエヴァンスを - スタブ技術と呼ばれ、そして唯一のスカラプロパティのために動作します。ビューにバインドしている 'User.Addresses'のようなナビゲーションプロパティがある場合、上記はアドレスを更新しません。 DBから再度Userを取得し、次に 'TryUpdateModel'を使用してオブジェクトを更新することをお勧めします。詳細については、私の最近の質問/回答を参照してください:http://stackoverflow.com/questions/4653834/asp-net-mvc-ef4-poco-repository-how-to-update-relationships/4666466#4666466 – RPM1984
@ RPM1984 - それはナビゲーション特性の面倒を節約するでしょう。私がTryUpdateModel()を使用して懸念しているのは、デザインです。私は物事の取得/保存/削除に対処するためにリポジトリを使用できることを保証しようとしています。 TryUpdateModel()を使用することで、これをコード化する方法の良いデザインの提案がありますか?私が意味するものを見れば、コントローラがデータベース関連のコードを処理することは望ましくありません。 –
いいえ、あなたが何を意味するのか分かりません。私は推測しますが、あなたのリポジトリに標準の "保存"メソッドを作成します。このメソッドは、新しい/既存のオブジェクト(IDなどに基づいています)の場合は「把握」します。したがって、repository.Updateまたはrepository.Addを呼び出す必要はありません。 TryUpdateModelをクリックして保存します。あなたがあなたのエンティティをあなたのエンティティに触れさせたくないというあなたの言及 - 私はあなたの懸念を理解していません。コントローラは、モデルをリフレッシュするためのものです。そして、それは "オブジェクト"を更新することです - あなたのリポジトリは上記のオブジェクトの永続性に依然として関心があります。 – RPM1984