Я новичок в Linq для EntityFramework, один вопрос в Linq2EntityFramework, который у меня есть, - когда или если избавиться от ObjectContext. Причина, по которой я задаю этот вопрос, состоит в том, что обычно в моем DAL есть код, подобный
public List<User> GetUsers()
{
using (MyEntities db = new MyEntities()) //where MyEntities inherits ObjectContext.
{
// do some linq select operation which returns IQueryable<User>
// call ToList() on the return IQueryable which is when the DB is really accessed
// then we return List<User>
}
// after using statement a Dispose method on ObjectContext is called, hence disposed the ObjectContext, and in turn it closes my DB connection and releases it to the pool
}
Теперь я не хочу этого делать, я хочу, чтобы мой DAL возвращал IQueryable для моего BLL вместо List, чтобы мой BLL мог выполнять фильтрацию, как Skip () для возвращенного IQueryable, а затем вызывать ToList () в BLL , Таким образом, код становится таким,
public IQueryable<User> GetUsers()
{
// do some linq select operation which returns IQueryable<User>
// then just return what we got back
// Note: no DB access occurred here, this is called deferred execution, because the real DB access happens later in BLL
}
Тогда в моем BLL есть метод, подобный
public List<User> GetUsers()
{
// get IQueryable<User> from DAL to a var say users
return users.Skip(10).Take(20).ToList(); // here the DB access really happens. Note: if we put using in DAL, here will throw exception saying DB is already closed!!
}
Мои вопросы,
- Если я воспользуюсь вторым подходом, узнает ли Linq2EF, что нужно закрыть соединение после завершения вышеуказанного метода?
- При втором подходе ObjectContext никогда не удаляется, будет ли это проблемой на больших сайтах?
- Или как мне вернуть IQuerayable, но при этом утилизировать ObjectContext в DAL?
Большое спасибо,
Ray.
Редактировать : Одна вещь, которую я не понимаю, это то, что, если соединение разумно управляется ObjectContext, тогда можно ли просто не избавляться от ObjectContext? Что еще кроме ObjectContext управляет?