Cela semble beaucoup plus difficile que cela ne devrait l'être.
Je suis en train d'écrire un site d'enregistrement d'événements en utilisant MVC3, SQL Compact Edition et Entity Frameworks Code First, tout en utilisant le package NuGet Mvc Scaffolding de Steven Sanderson.
Comme la liste des événements ne devrait pas changer beaucoup, je la mets en cache dans une liste globale dans la méthode Application_Start :
var repo = new RaceEventRepository();
EventRaces =
repo.All.Where(r => r.RaceName.Contains(eventName)).Select(r => r).ToList();
où RaceEventRepository est une classe de répertoire construite par MvcScaffolding, et fait un
EventContext context = new EventContext();
qui est ensuite utilisé dans tout le répertoire, et (j'imagine) est disposé lorsque le Répertoire est disposé. et EventRaces est une liste disponible globalement.
Mon problème est que lorsque je crée ensuite un enregistrement d'inscrit avec une clé étrangère vers l'événement de course stocké dans EventRaces, j'obtiens une erreur "Un objet d'entité ne peut pas être référencé par plusieurs instances de IEntityChangeTracker".
Selon plusieurs billets de blog et réponses SO, je dois Détacher les entités mises en cache du contexte comme dans la liste 1 de ce post.
Mon problème est que, en utilisant ObjectBrowser, je ne trouve rien avec une méthode Detach. Le contexte dans le Répertoire n'en a pas. Les différents DbSets dans le contexte n'en ont pas (bien qu'ils aient une méthode Attach()). System.Data.Object.ObjectSet en a une, mais je ne trouve pas de correspondance entre un DbSet et un ObjectSet.
De toute évidence, je rate quelque chose. Est-ce que quelqu'un peut me guider dans la bonne direction ?