这似乎比它应该做的要困难得多。
我正在使用 MVC3、SQL Compact Edition 和 Entity Frameworks Code First 编写一个事件注册站点,并使用 Steven Sanderson 的 Mvc Scaffolding NuGet 包。
由于事件列表不太可能发生太大变化,因此我将其缓存到 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 是一个全局可用的列表。
我的问题是,当我使用外键创建注册人记录时,该记录返回存储在 EventRaces 中的 RaceEvent,我收到错误消息“IEntityChangeTracker 的多个实例无法引用实体对象”。
根据几篇博客文章和 SO 答案,我需要从上下文中分离缓存的实体,如本文的清单 1 所示。
我的问题是,使用 ObjectBrowser,我无法使用 Detach 方法找到任何东西。存储库中的上下文没有。上下文中的各个 DbSet 没有一个(尽管它们有一个 Attach() 方法)。System.Data.Object.ObjectSet 有一个,但我找不到 DbSet 和 ObjectSet 之间的映射。
显然,我错过了一些东西。有人可以指出我正确的方向吗?