首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从EF Code First上下文中分离实体

如何从EF Code First上下文中分离实体
EN

Stack Overflow用户
提问于 2011-06-19 00:50:08
回答 1查看 5.8K关注 0票数 4

这似乎比它应该做的要难得多。

我正在使用MVC3、SQL Compact Edition和实体框架Code First编写一个事件注册站点,并使用Steven Sanderson的Mvc Scaffolding NuGet包。

由于事件列表不太可能发生太多更改,因此我将其缓存在Application_Start方法中的全局列表中:

代码语言:javascript
复制
        var repo = new RaceEventRepository();
            EventRaces =
                repo.All.Where(r => r.RaceName.Contains(eventName)).Select(r => r).ToList();

其中,RaceEventRepository是由MvcScaffolding构造的存储库类,它执行

代码语言:javascript
复制
EventContext context = new EventContext();

然后在整个存储库中使用它,并且(我假设)在存储库被处理时处理它。EventRaces是一个全局可用的列表。

我的问题是,当我使用存储在EventRaces中的RaceEvent的外键创建一个注册者记录时,我得到了一个错误“一个实体对象不能被IEntityChangeTracker的多个实例引用”。

根据几篇博客文章等回答,我需要像Listing 1 of this post那样将缓存的实体从上下文中分离出来。

我的问题是,使用ObjectBrowser时,我找不到任何具有分离方法的内容。存储库中的上下文没有上下文。上下文中的单个DbSets没有(尽管它们有一个Attach()方法)。System.Data.Object.ObjectSet有一个,但我找不到DbSet和ObjectSet之间的映射。

很明显,我漏掉了什么。谁能给我指个方向?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-19 03:07:10

您可以使用AsNoTracking扩展方法来查询您的列表,而无需将对象附加到上下文...

代码语言:javascript
复制
var repo = new RaceEventRepository();
EventRaces = repo.All.AsNoTracking()
    .Where(r => r.RaceName.Contains(eventName))
    .ToList();

..。或者,您可以通过将单个实体的状态设置为Detached来将其与上下文分离

代码语言:javascript
复制
context.Entry(raceEvent).State = EntityState.Detached;
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6397465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档