私は数日間この上に私の髪を引き裂きました、そして、私が完全に脱毛する前に、これを行う方法を私よりも賢く全員に頼む時が来ました。Entity Framework Code Firstアプローチを使用してエンティティを編集するにはどうすればよいですか?
が、私は今、コードファーストCTP 5およびMVC 3
で例外メッセージをEntity Frameworkの4を使用していても同じキーを持つオブジェクトが既にObjectStateManagerに存在する」である。ObjectStateManagerが持つ複数のオブジェクトを追跡することはできません同じ鍵です。 "クライアントインターフェイス上の保存方法がこれです
public ActionResult Save(ClientEntity postedClient)
{
try
{
if (ModelState.IsValid)
{
Base.clientInterface.Save(postedClient);
return RedirectToAction("Index");
}
}
catch (Exception)
{
throw;
}
SetupManageData(null, postedClient);
return View("Manage");
}
:
public void Save(ClientEntity theClient)
{
SetContext();
if (theClient.clientId == 0)
this.pContext.Clients.Add(theClient);
else
{
ClientEntity existingClient = GetSingle(theClient.clientId); // Get the existing entity from the data store.
// PseudoCode: Merge existingClient and theClient - Can this be done without using ObjectStateManager?
// PseudoCode: Attach merged entity to context so that SaveChanges will update it in the database - is this correct?
}
this.pContext.SaveChanges();
}
private void SetContext()
{
if (this.pContext == null)
this.pContext = new PersistanceContext();
}
持続性コンテキストがDBContextであり、このようになります。ここで
まずアップは、編集フォームがに投稿されたコントローラであり、 :
public class PersistanceContext : DbContext
{
public DbSet<ClientEntity> Clients { get; set; }
}
私は実際にプロパティを手動でマップする必要がないようにしています。そうしないと、新しいプロパティが追加された場合に間違いの余地があります。 –
はい、私は常にオブジェクトの作成と編集を2つのビューに分割し、TryUpdateModel()を使用してプロパティをマップします。 –