J'essaie d'implémenter la méthode "Repository-Pattern" et "Edit" dans Contact-Controller l'utilisation de "Attach Méthode" dans Contact-Repository est Erreur de lancement.Impossible de convertir l'objet de type 'DBContext.Models.Contact' en type 'System.Data.Entity.Infrastructure.IObjectContextAdapter'
Additional information: Unable to cast object of type 'Contacts.Models.Contact' to type 'System.Data.Entity.Infrastructure.IObjectContextAdapter'.
Avant cette question, je fait face à un autre problème de ObjectStateManger Extension non trouvée erreur dans le code:
entities.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
donc je devais utiliser une nouvelle variable « gestionnaire » comme une solution pour la question d'une autre pile sur fil d'écoulement (ObjectStateManager no definition issue) Fixer Méthode en contact de dépôt
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);
}
Modifier la méthode en contact contrôleur qui fait usage de C ontactRespository
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);
}
I Remplacement du code joint entier par cette ligne et son fonctionnement. 'entities.Entry (entité) .State = EntityState.Modified;' Même dans mon code que j'ai entités 'de CTEntities privées = new CTEntities();' Et je gestionnaire 'a remplacé var = ((IObjectContextAdapter) entités) .ObjectContext.ObjectStateManager; ' J'ai remplacé l'entité par" Entities "qui était l'instance de mon DBContext et son fonctionnement correct. Merci beaucoup! – Arun3x3