私はContact-Controllerの "Repository-Pattern"と "Edit"メソッドを実装しようとしていますContact-Repositoryで「Attach Method」を使用すると、Errorがスローされます。タイプ 'DBContext.Models.Contact'のオブジェクトを型 'System.Data.Entity.Infrastructure.IObjectContextAdapter'にキャストできません
Additional information: Unable to cast object of type 'Contacts.Models.Contact' to type 'System.Data.Entity.Infrastructure.IObjectContextAdapter'.
この問題は、私はコード内のエラーを発見していないObjectStateManger拡張の別の問題に直面する前に:だから私は別のスタックから問題の解決策として、新たな変数「マネージャー」を使用していた
entities.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
を (ObjectStateManager no definition issue)フロースレッド上には、Cを利用した接触コントローラで接触リポジトリ
public void Attach(Contact entity)
{
if (entity == null)
throw new ArgumentNullException("entity");
var manager = ((IObjectContextAdapter)entity).ObjectContext.ObjectStateManager;
entities.Contacts.Attach(entity);
manager.ChangeObjectState(entity, EntityState.Modified);
}
編集メソッドのメソッドを添付しますで
public ActionResult Edit(int?id)
{
Contact contact = repo.Get(c => c.ID == id);
if (contact == null)
{
return HttpNotFound();
}
return View(contact);
}
//
// POST: /Contacts/Edit/5
[HttpPost]
public ActionResult Edit(Contact contact)
{
if (ModelState.IsValid)
{
repo.Attach(contact);
repo.SaveChanges();
return RedirectToAction("Index");
}
return View(contact);
}
私は、この行とその働きでEntire Attach Codeを置き換えました。 'entities.Entry(エンティティ).State = EntityState.Modified;'私は '民間CTEntities実体=新しいCTEntities()持っていても私のコードで ;' と私は置き換えを 'VARマネージャ=((IObjectContextAdapter)エンティティ).ObjectContext.ObjectStateManager; ' エンティティを、私のDBContextのインスタンスであった" Entities "と置き換えました。どうもありがとうございました! – Arun3x3