PDA

View Full Version : سوال: خطای dispose در entity framework



manit44
جمعه 24 خرداد 1398, 01:33 صبح
با سلام

من در entity framework با خطای زیر مواجه میشم - دلیل بروز این خطا چیه؟ و چطور باید برطرفش کنم؟ البته من دو تا context یکسان که برای دو دیتابیس مختلف هست.

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection


اینم کدمه:
private int MoveWorkFlowInstanceForObject(string objectId) {
List<WORKFLOWINSTANCE> objectWorkFlowInstance = GetWorkFlowInstanceForObject(objectId);
int resultCode = 0;
if (resultCode != 0)
{
return resultCode;
}
using (var Real = new DBModelReal())
{
using (var Test = new DBModelTest())
{
foreach (WORKFLOWINSTANCE oneWorkFlowInstance in objectWorkFlowInstance.ToList())
{
try
{
if (!Test.WORKFLOWINSTANCEs.Any(c => c.ID == oneWorkFlowInstance.ID))
{
Test.WORKFLOWINSTANCEs.Add(oneWorkFlowInstance);
Test.SaveChanges();
}
foreach (WORKFLOWACTIVITYINSTANCE oneWorkFlowActivityInstance in oneWorkFlowInstance.WORKFLOWACTIVITYINSTANCEs.ToLi st())
{
var copyWorkFlowActivityInstance = (WORKFLOWACTIVITYINSTANCE)Real.Entry(oneWorkFlowAc tivityInstance).CurrentValues.ToObject();
if (!Test.WORKFLOWACTIVITYINSTANCEs.Any(c => c.ID == copyWorkFlowActivityInstance.ID))
{
Test.WORKFLOWACTIVITYINSTANCEs.Add(copyWorkFlowAct ivityInstance);
Test.SaveChanges();
}
foreach (WORKFLOWINSTANCEWORKITEM oneWorkFlowInstanceWorkItem in oneWorkFlowActivityInstance.WORKFLOWINSTANCEWORKIT EMs.ToList())
{
if (oneWorkFlowInstanceWorkItem.WORKFLOWINSTANCEWORKI TEM2 != null)
{
var copyWorkFlowInstanceWorkItem = (WORKFLOWINSTANCEWORKITEM)Real.Entry(oneWorkFlowIn stanceWorkItem.WORKFLOWINSTANCEWORKITEM2).CurrentV alues.ToObject();
if (!Test.WORKFLOWINSTANCEWORKITEMs.Any(c => c.ID == copyWorkFlowInstanceWorkItem.ID))
{
Test.WORKFLOWINSTANCEWORKITEMs.Add(copyWorkFlowIns tanceWorkItem);
Test.SaveChanges();
}
}
else if (oneWorkFlowInstanceWorkItem.WORKFLOWINSTANCEWORKI TEM1.Count > 0)
{
var copyWorkFlowInstanceWorkItem = (WORKFLOWINSTANCEWORKITEM)Real.Entry(oneWorkFlowIn stanceWorkItem).CurrentValues.ToObject();
if (!Test.WORKFLOWINSTANCEWORKITEMs.Any(c => c.ID == copyWorkFlowInstanceWorkItem.ID))
{
Test.WORKFLOWINSTANCEWORKITEMs.Add(copyWorkFlowIns tanceWorkItem);
Test.SaveChanges();
}
}
}
}
}
catch (Exception)
{
statusStrip1.BackColor = Color.Red;
toolStripStatusLabel1.Text = GetWorkFlowErrorMessage(701, objectId);
}
}
}
}
return resultCode;
}


توی این قسمت خطا رو بهم میده:

foreach (WORKFLOWACTIVITYINSTANCE oneWorkFlowActivityInstance in oneWorkFlowInstance.WORKFLOWACTIVITYINSTANCEs.ToLi st())

ممنون میشم دوستان کمک کنند.

alexmcse
جمعه 24 خرداد 1398, 06:52 صبح
ترجمه خطای زیر این است
نمونه کانتکست دیسپوز شده است و دیگر نمی تواند برای عملیات مورد نیاز برای اتصال استفاده شود
یک ابجکت جدید تعریف کنید ودر برنامه استفاده کنید (کانتکست را new کنید)

manit44
جمعه 24 خرداد 1398, 10:34 صبح
دوست عزیز این کار رو کردم ولی باز همون خطا رو داد.

manit44
جمعه 24 خرداد 1398, 11:43 صبح
دوستان دیگه لطفا کمک کنند.