EF4.1 зависает на 120 секунд при использовании Microsoft.ApplicationServer.Caching.DataCacheFactory - PullRequest
1 голос
/ 15 ноября 2011

У меня постоянно повторяется 120-секундное зависание всякий раз, когда приложение вызывает

 this.cacheProvider.Add(new CacheItem(cacheKey, data, this.regionName), cachePolicy);

в строке 60 CachedDataSource.cs образца. . Метод .Add является внутренним для библиотеки Microsoft, и у меня нет кода для него. Вот мои параметры:

cacheKey = "listofCompanies"
data = // this is an EF 4.0 database first model class with 70 entries... result from IQueryable
this.regionName = "companies"

Воспроизведение ошибки:

У меня есть первый в базе данных проект EF4.0, который я недавно обновил до 4.1, добавив ссылку "EntityFramework" и ContextGenerator в мой DAL .

Если я отменю эти изменения, то мое приложение будет немедленно выполнено.

Мой DAL и репозиторий хранятся в отдельной DLL от моего приложения MVC. Не уверен, что это играет роль в проблеме.

О моем хранилище

    /// Sample repository.  Note that I return List<T> as IEnumerable, 
    /// and I use IDisposable 
    ///
    public class CompanyRepository : DisposableBase, ICompanyRepository
    {
        public IEnumerable<CompanyDetail> GetOneCompany(int? CompanyID)
        {
            var t = from c in _entities.CompanyDetail
                    where c.CompanyID == CompanyID.Value
                    select c;
            return t.ToList();
        }
    }

    /// <summary>
    /// Disposable implementation based on advice from this link:
    /// from Http://www.asp.net/entity-framework/tutorials/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application
    /// </summary>
    public class DisposableBase : IDisposable
    {
        protected TLSAdminEntities1 _entities;

        public DisposableBase()
        {
            _entities = new TLSAdminEntities1();
            disposed = false;
        }

        private bool disposed ;
        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    _entities.Dispose();
                }
            }
            this.disposed = true;
        }
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
    }

Вопрос

Это ошибка, или я использую EF4.1, или слой Caching неправильно?

1 Ответ

0 голосов
/ 15 ноября 2011

Вы упоминаете, что данные являются результатом IQueryable.Вы пытались выполнить .ToList () сначала для данных перед их отправкой в ​​кеш?

...