Наша компания имеет программное приложение, которое использует
-Entity Framework 4
-Код Первый подход
![enter image description here](https://i.stack.imgur.com/ZKy3z.png)
В нашем коде уровня доступа к данным у нас есть экземпляры контекста нашей базы данных Entity Framework:
public class DataAccessLayer
{
protected DbContext _context;
public List<Task> GetSpecificProjectTasks(int projectIdInQuestion)
{
_context.Configuration.LazyLoadingEnabled = false;
List<Task> taskList =
(from tsk in _context.Tasks
join prj in _context.Projects on prj.ID_Project
equals tsk.ParentID_Project
select tsk).ToList();
_context.Configuration.LazyLoadingEnabled = true;
return taskList;
}
}
Теперь предположим, что некоторый клиентский код выполняет следующие действия:
List<Task> crazyTaskList = null;
using (DataAccessLayer dal = new DataAccessLayer())
{
crazyTaskList = dal.GetSpecificProjectTasks(5);
}
foreach (Task tsk in crazyTaskList)
{
}
Код клиентаforeach
цикл выдает ошибку, потому что crazyTaskList
равен null
, и это дает мне ошибку The ObjectContext instance has been disposed can can no longer be used for operations that require a connection
.Почему это все еще null
?Я уже временно отключил ленивую загрузку, так почему же это null
?Более того, если мне придется отсоединить огромный список, содержащий много объектов типа Task
, было бы действительно неэффективно написать какой-то цикл, подобный следующему:
public List<Task> GetSpecificProjectTasks(int projectIdInQuestion)
{
_context.Configuration.LazyLoadingEnabled = false;
List<Task> taskList =
(from tsk in _context.Tasks join prj in _context.Projects
on prj.ID_Project equals tsk.ParentID_Project
select tsk).ToList();
// The following loop is inefficent
for(int i = 0; i < taskList.Count(); i++)
{
dbContext.Entry(taskList[i]).State = EntityState.Detached;
}
_context.Configuration.LazyLoadingEnabled = true;
return taskList;
}