Entity Frameworkを使用するときに、呼び出しチェーンのどこに呼び出しを含める必要があるのか知りたいです。次の方法を検討してください。
// sample usage from service layer
// _customerRepository.Paginate(1, out totalRecords, 25, "DateJoined DESC, AmountSpent", "DateJoined >= '2009-02-01'", "Invoices, Refunds");
public virtual IQueryable<T> Paginate(int page, out int total, int pageSize, string sort = "Id", string filter = null, string includes = null)
{
IQueryable<T> query = DatabaseSet;
total = query.Count(); // get total # of records (required for pagination)...
var skipTo = GetValidSkipCount(page, total, pageSize);
if (!String.IsNullOrWhiteSpace(filter))
{
query.Where(filter);
}
// should includes be before filtering?
// should query.Count() be called after query.Include?
// does it matter?
if (!String.IsNullOrWhiteSpace(includes))
{
query.IncludeMany(includes); // my own extension that takes comma separated string of entities to include
}
return query.OrderBy(sort).Skip(skipTo).Take(pageSize);
}
私の質問は次のとおりです。
- インクルードは常にコールチェーンの最初にある必要がありますか?
- Count()はインクルードの影響を受けますか?もしそうなら、私はインクルード後にカウントするべきだと思います
- フィルタリングの前または後に含める必要がありますか(場所)?
- EFはすべてを理解するのに十分「賢い」ので、それは本当に重要ですか?