Entity framework EF将实体置于上下文之外,并在需要时返回

Entity framework EF将实体置于上下文之外,并在需要时返回,entity-framework,serialization,objectcontext,Entity Framework,Serialization,Objectcontext,我有一个使用EF4.3 ObjectContext的销售收据表单。我正在努力弄清楚如何持有收据(EF ObjectContext中的一个实体)并将其移出上下文,并在用户需要时将其取回。这种情况是,每当销售收据表单关闭时,上下文就会消失。问题是,用户应该能够将其检索回来并添加到当前上下文中 要分离的代码 Serialize(receipt, savepath) While Receipt.RECEIPTLINEs.Count > 0 Context.Detach(Receipt.

我有一个使用EF4.3 ObjectContext的销售收据表单。我正在努力弄清楚如何持有收据(EF ObjectContext中的一个实体)并将其移出上下文,并在用户需要时将其取回。这种情况是,每当销售收据表单关闭时,上下文就会消失。问题是,用户应该能够将其检索回来并添加到当前上下文中

要分离的代码

Serialize(receipt, savepath)
While Receipt.RECEIPTLINEs.Count > 0
      Context.Detach(Receipt.RECEIPTLINEs.First)
End While
Context.Detach(Receipt)
AddNewReceipt()
要附加的代码

Dim receipt = DeSerialize(savepath)
Context.Attach(receipt)

用户总是可以将其检索回来-您将在新上下文上执行查询。您只需要知道收据的标识(钥匙)

如果您需要共享收据实例,您必须简单地构建一些基础结构代码,在其中您将保留对收据的引用,第一个表单将设置它,后面的代码将使用它-EF无法为您做任何事情。您只需要在关闭第一个表单之前将收据从上下文中分离出来

objectContext.Detach(receipt);

基本上你的意思是我需要有一个全局可用的独立上下文,每当用户持有收据时,我必须将其与当前上下文分离,并将其附加到新上下文。当需要时,只需查询新上下文并将其附加到当前上下文…否。您不需要任何全局上下文。谢谢您的时间。Attach and Detach抛出ObjectStateManager错误,如“无法跟踪多个对象”或“具有temporay EntityKey值的对象无法附加到对象上下文”。如果您能提供一个小代码段,我将非常感激。我通过添加我使用的代码编辑了我的问题。我收到错误消息。如果您序列化和反序列化数据,则不需要分离它们。此外,如果您使用基于
EntityObject
的实体,并且从未将收据保存到上下文中,则以后无法附加收据,这就是例外情况。从
EntityObject
派生的从未保存的实体只能通过
AddObject
方法添加。是否使用基于
EntityObject
的实体?在这种情况下,当您需要它们时,请放弃并从数据库中加载它们。