更新 - 显然,DbLinq没有正确实现Dispose()方法。唉!
以下内容有些误导性 - 底线是:DbLinq目前(还)无法与LinqToSql等效,这是我最初提出此问题时假定的。请谨慎使用!
我正在使用Repository模式和DbLinq。 我的存储库对象实现IDisposable,并且Dispose()方法只调用DataContext上的Dispose()方法。每当我使用存储库时,我都会将其包装在using块中,就像这样:
在这个例子中,
所以,有三个问题:
以下内容有些误导性 - 底线是:DbLinq目前(还)无法与LinqToSql等效,这是我最初提出此问题时假定的。请谨慎使用!
我正在使用Repository模式和DbLinq。 我的存储库对象实现IDisposable,并且Dispose()方法只调用DataContext上的Dispose()方法。每当我使用存储库时,我都会将其包装在using块中,就像这样:
public IEnumerable<Person> SelectPersons()
{
using (var repository = _repositorySource.GetPersonRepository())
{
return repository.GetAll(); // returns DataContext.Person as an IQueryable<Person>
}
}
这个方法返回一个 IEnumerable<Person>
,因此如果我理解正确,直到遍历 Enumerable<Person>
(例如将其转换为列表或数组,或在 foreach
循环中使用它)之前,实际上并没有对数据库进行查询,就像这个例子一样:
var persons = gateway.SelectPersons();
// Dispose() is fired here
var personViewModels = (
from b in persons
select new PersonViewModel
{
Id = b.Id,
Name = b.Name,
Age = b.Age,
OrdersCount = b.Order.Count()
}).ToList(); // executes queries
在这个例子中,
Dispose()
在设置persons
(一个 IEnumerable<Person>
)之后立即被调用,并且那是唯一调用它的时间。所以,有三个问题:
- 这是如何工作的?在
DataContext
被处理后,如何查询数据库获取结果? Dispose()
实际上是做什么的?- 我听说不需要(例如,参见此问题)处理
DataContext
,但我的印象是这并不是一个坏主意。 有没有任何理由不要处理DbLinq的DataContext
?
repository.GetAll()
方法是做什么的?它返回什么? - Ryan Alford