-1

Использование Единица работы Repository шаблонПожалуйста, помогите мне понять, что делает мои функции Slow

частный UnitOfWork UnitOfWork = новый UnitOfWork();

private Entities _Entities = new Entities(); 

var filing_xml = unitOfWork.T_FILING_XMLRepository.Get().Where(a => 
    a.filing_id == filingID).FirstOrDefault(); 

Это занимает около 10 секунд, чтобы получить данные

var filing_xml = _Entities.T_FILING_XML.Where(a => a.filing_id == filingID).FirstOrDefault(); 

Это занимает около 2 секунд, чтобы получить данные

Есть ли решение, чтобы сделать единицу работы быстрее?

public virtual IEnumerable<TEntity> Get(
    Expression<Func<TEntity, bool>> filter = null, 
    Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, 
    string includeProperties = "") 
{ 
    IQueryable<TEntity> query = dbSet; 

    if (filter != null) 
    { 
     query = query.Where(filter); 
    } 

    foreach (var includeProperty in includeProperties.Split 
     (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) 
    { 
     query = query.Include(includeProperty); 
    } 

    if (orderBy != null) 
    { 
     return orderBy(query).ToList(); 
    } 
    else 
    { 
     return query.ToList(); 
    } 
} 

Единица работа класс

public GenericRepository<T_FILING_XML> T_FILING_XMLRepository 
{ 
    get 
    { 
     if (this.t_filing_xmlRepository == null) 
     { 
      this.t_filing_xmlRepository = new GenericRepository<T_FILING_XML>(context); 
     } 
     return t_filing_xmlRepository; 
    } 
} 
+2

«Шаблон» не делает ваш SP медленным. Пожалуйста, опубликуйте свой класс UOW. – mxmissile

+0

привет mxmissile .. обновили код, добавив класс UOW – user6392608

+0

Для случая № 2 (тот, который занимает 2 секунды), можете ли вы проверить, есть ли указатель в столбце fill_id? Если у вас уже есть, можете ли вы разместить SQL с помощью SQL Profiler? –

ответ

0

код # 1

private Entities _Entities = new Entities(); 

var filing_xml = unitOfWork.T_FILING_XMLRepository.Get().Where(a => 
    a.filing_id == filingID).FirstOrDefault(); 

Вы выборка всех записей из базы данных, то вы отфильтровать результат в приложении, чтобы получить только одна запись. У вашего метода Get есть параметр фильтра, почему бы не использовать его?

Используя приведенный ниже код, вы получите только одну запись из базы данных.

var filing_xml = unitOfWork.T_FILING_XMLRepository.Get(a => 
    a.filing_id == filingID).FirstOrDefault();