繁体   English   中英

如果我处理我的ObjectContext,我的实体是否已分离?

[英]If I dispose of my ObjectContext, are my entities detached?

换句话说,如果我检索实体,然后处理我的ObjectContext,我是否必须明确分离所有实体?

也许这取决于Detach的含义。 附加实体意味着上下文知道实体并跟踪其变化。 如果您处置上下文,则它无法再跟踪更改,并且实体就像已分离。 这里有类似意义。

如果您正在使用动态代理(POCO - 动态更改跟踪或延迟加载),则代理本身会在内部对内容进行向后引用,但它不会对上下文处理做出反应。 它仍然保留引用(顺便说一下,这可能是一些讨厌的内存泄漏的来源)。 这会在两种情况下导致问题:

  • 当您尝试将此类实体附加到另一个上下文时,它将抛出一些异常,即只能通过单个上下文跟踪实体(尽管原始上下文已经死亡)。
  • 当您尝试访问未加载的导航属性时,您将获得ObjectDisposedException因为代理将触发已处置上下文的延迟加载。

避免这种情况的唯一方法是在处置上下文之前禁用动态代理或手动分离实体。 这有另一个缺点 - 分离实体破坏了关系。

不,您不必在您的实体上调用分离。 但是,如果您执行以下操作:

var people = Context.Person.Where(p => p.FirstName == "John");

然后处理你的上下文,人们会抛出异常,因为IEnumerable已经延迟执行。 这样做:

var people = Context.Person.Where(p => p.FirstName == "John").ToList();

会让你仍然使用你的人员名单。

进一步,

var john = Context.Person.FirstOrDefault(p => p.Id == 342);

将在处理上下文后工作,因为您已获取特定实体而非枚举。

处理完上下文后,您的实体将被分离。 请看以下帖子:

实体框架多对象上下文

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM