Это кажется намного сложнее, чем должно быть.
Я пишу сайт регистрации событий, используя 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.»
Согласно нескольким постам в блоге и таким ответам, мне нужно отсоединить кэшированные объекты от контекста, как в Листинге 1 этого поста .
Моя проблема в том, что, используя ObjectBrowser, я не могу найти ничего с помощью метода Detach. контекст в репозитории не имеет. Отдельные DbSet в контексте не имеют ни одного (хотя у них есть метод Attach ()). У System.Data.Object.ObjectSet есть такой, но я не могу найти отображение между DbSet и ObjectSet.
Очевидно, я что-то упустил. Может ли кто-нибудь указать мне правильное направление?