使用实体框架代码首先,我有这样的:为什么设置EntityState分离清空类型列表的属性<T>?
public class Foo
{
public int Id { get; set; }
public List<Bar> Bars { get; set; }
}
Foo foo = (from f in ctx.Foos.Include("Bars") where f.Id == 42 select f).Single();
// At this point foo.Bars is populated
ctx.Entry(foo).State = EntityState.Detached;
// At this point foo.Bars is an empty List
为什么分离对象的原因,而是财产public List<string> Bars
,这是明确的,并成功列入,被掏空?
分离可能具有许多属性的对象的正确过程是什么?
的的DbContext超出我的目标是不断设置前不久范围。使用'AsNoTracking()'加载我的对象允许收集DbContext,还是我的对象仍然保持对它的引用?这是我最关心的问题。 – 2012-04-27 01:19:20
@EricJ .:您首先使用EF代码,因此您的实体是POCO。如果你不使用延迟加载(并且它看起来不是'Foo.Bars'不是'virtual'),那么实体不是代理,并且它们没有对上下文的引用。所以,答案是肯定的,即使你仍然持有对你的实体的引用,上下文将被垃圾收集。 – Slauma 2012-04-27 10:54:02
如果实体是代理,那么上下文将不会被垃圾收集,直到实体被处置? – 2012-04-27 19:02:12