Tôi hiện đang tạo một ứng dụng trong C# 4.0 với EntityFramework 6.0.Trường hợp khoản không được bao gồm trong truy vấn SQL
Tôi đang cố truy xuất danh sách mục từ cơ sở dữ liệu nhưng vấn đề là truy vấn SQL được tạo bởi khung công tác EF không bao gồm mệnh đề where.
Vì vậy, toàn bộ bảng/lượt xem được tải trong bộ nhớ và mất khoảng 10 giây để chỉ nhận được 2 hoặc 3 mục.
Dưới đây, các phương pháp từ GenericRepostitory tôi:
public IList<TEntity> GetList(Func<TEntity, bool> where, params Expression<Func<TEntity, object>>[] navigationProperties)
{
using (var dbContextScope = contextScopeFactory.CreateReadOnly())
{
IQueryable<TEntity> dbQuery = Context.Set<TEntity>().AsQueryable();
foreach (Expression<Func<TEntity, object>> navigationProperty in navigationProperties)
dbQuery = dbQuery.Include<TEntity, object>(navigationProperty);
var list = dbQuery
.AsNoTracking()
.Where(where);
Context.Database.Log = s => Debug.WriteLine(s);
return list.ToList<TEntity>();
}
}
Và tôi gọi nó là như thế này:
var repository = repositoryFactory.Get<Context, Entity>();
var items = repository.GetList(x => x.FakeID <= 10);
Kết quả trả về là tốt nhưng phải mất khoảng 10 giây để được lấy ra. Và khi gỡ lỗi ghi truy vấn SQL được tạo, mệnh đề where là hư không
Làm cách nào tôi có thể sửa đổi hàm GetList để bao gồm mệnh đề where?
Tôi hy vọng tôi đã đủ thông tin với những thông tin này và tôi xin lỗi vì tiếng anh của tôi. Đó không phải là ngôn ngữ mẹ đẻ của tôi:/
Dù sao, cảm ơn bạn để được giúp đỡ của bạn
'Context.Set() .AsQueryable(); 'là gì' Context' nếu không phải là một 'DbContext '? Không thể cần đến 'AsQueryable' ở đây. –
Có, tôi không nên xóa nó. Đó là vì tôi đã bị mắc kẹt với vấn đề này kể từ một vài giờ và đã thử rất nhiều thứ khác nhau ... – Mica