Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 如何使用BackgroundWorker在实体框架中正确使用对象上下文_Entity Framework_Backgroundworker - Fatal编程技术网

Entity framework 如何使用BackgroundWorker在实体框架中正确使用对象上下文

Entity framework 如何使用BackgroundWorker在实体框架中正确使用对象上下文,entity-framework,backgroundworker,Entity Framework,Backgroundworker,我正在使用实体框架和WPF进行开发,我遇到了一些错误,我不知道为什么。保存记录时(使用BackgroundWorker),我将entities change tracker设置为nothing(null),将记录附加到新的一次性上下文,保存、分离并处置上下文 保存记录会在程序的MainViewModel中触发事件,其他ViewModels(包括正在保存的)需要刷新其实体以反映更改 Private Sub _saveRecordWorker_DoWork(ByVal sender As Objec

我正在使用实体框架和WPF进行开发,我遇到了一些错误,我不知道为什么。保存记录时(使用
BackgroundWorker
),我将entities change tracker设置为nothing(null),将记录附加到新的一次性上下文,保存、分离并处置上下文

保存记录会在程序的
MainViewModel
中触发事件,其他
ViewModels
(包括正在保存的)需要刷新其实体以反映更改

Private Sub _saveRecordWorker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles _saveRecordWorker.DoWork
    Using MyContext As New RVShippingEntities
        Dim MyShipment = CType(ShipmentRecord, IEntityWithChangeTracker)
        MyShipment.SetChangeTracker(Nothing)
        MyContext.Attach(MyShipment)
        MyContext.Detach(ShipmentRecord)
    End Using
End Sub
刷新后台工作程序与此类似,但它有一个
Do While
块,以防止它干扰save工作程序(该工作程序似乎不工作;因此为post)。保存(随后刷新)时,出现以下错误: 调用线程无法访问此对象,因为其他线程拥有它。

我认为使用
DoWhile
块,它会等待(当我一步一步地执行时)直到保存线程完成,一切都会很好。但似乎有什么东西(主线程或保存线程)仍在进行干扰

有更好的方法吗?我是不是在用愚蠢的方式做这件事?任何帮助都将不胜感激


(显然,Firefox将kludgey视为一个词。很有趣)

那么,3个多月了,到目前为止,实体框架还没有例外。我将称之为答案


父视图(在我的案例中是公司、客户、装运)有一个上下文,该上下文根据需要传递给子视图(地址、电话号码、电子邮件地址,适用于公司和客户;包裹、内容,适用于装运)。每当上下文无法保存更改或您所做的任何更改时(db断开是最常见的原因),都会释放上下文,实例化一个新的上下文,重新附加实体,将其设置为“修改”(基于我对UI所做的自定义更改跟踪),并保存更改。

我正在使用EF thusly:每个Perent视图都有一个上下文。子视图(例如联系人地址或装运包裹)共享其父视图的上下文。为了维护上下文,我偶尔保存数据(这成为一项要求;偶尔自动保存)并刷新数据。如果由于某种原因失败,则实体将被解除跟踪,上下文将被销毁、重新创建,实体将附加到新上下文,并设置为“已修改”、“已保存”,所有操作都将像以前一样继续。对用户透明。到目前为止,它似乎运行得很好。