Это кажется намного сложнее, чем должно быть.
Я пишу сайт регистрации событий, используя MVC3, SQL Compact Edition и Entity Frameworks Code First, а также использую пакет NuGet Стивена Сандерсона Mvc Scaffolding.
Поскольку список событий вряд ли сильно изменится, я кэширую его в глобальный список в методе Application_Start:
var repo = new RaceEventRepository();
EventRaces =
repo.All.Where(r => r.RaceName.Contains(eventName)).Select(r => r).ToList();
где RaceEventRepository — это класс репозитория, созданный MvcScaffolding, и выполняет
EventContext context = new EventContext();
который затем используется через репозиторий и (я полагаю) удаляется при удалении репозитория. а EventRaces — это глобально доступный список.
Моя проблема заключается в том, что когда я затем создаю запись регистранта с внешним ключом обратно в RaceEvent, который хранится в EventRaces, я получаю сообщение об ошибке «На объект сущности не может ссылаться несколько экземпляров IEntityChangeTracker».
Согласно нескольким сообщениям в блогах и ответам SO, мне нужно отделить кэшированные объекты от контекста, как в Список 1 этого сообщения.
Моя проблема в том, что с помощью ObjectBrowser я ничего не могу найти с помощью метода Detach. контекст в репозитории не имеет его. Отдельные наборы DbSet в контексте не имеют его (хотя у них есть метод Attach()). System.Data.Object.ObjectSet имеет один, но я не могу найти сопоставление между DbSet и ObjectSet.
Ясно, я что-то упускаю. Может ли кто-нибудь указать мне в правильном направлении?