Entity Framework Slow First Call IRepository DbContext

1

Мы используем сущность framework 6.1.1 с DbContext, как показано ниже, и EntityTypeConfiguration, чтобы отобразить приблизительно 400 объектов в наш DbContext. Затем мы создаем экземпляр нашего DbContext и используем его для создания наборов объектов для каждого объекта IRepository, который мы используем на нашем уровне обслуживания. Проблема, с которой я не могу найти решение, заключается в том, что первый вызов db занимает приблизительно 18 секунд, когда мы используем профайлер Ants.

Я рассмотрел создание представлений, но не могу найти способ сделать это, когда DbContext не содержит жестко закодированные коллекции DbSet для сущностей. Есть ли способ предварительной генерации представлений с нашим шаблоном, и если это так, мы увидим значительное улучшение производительности?

Или пришло время идти по другому пути, следует ли создавать меньшие DbContexts, которые предназначены для определенных областей базы данных при логических разделениях?

  public class Context: DbContext
  {
#pragma warning disable
    Type dummyType_SqlProviderServices = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
#pragma


static Context()
{
  Database.SetInitializer(new ContextatabaseInitializer<Context>());

}

public Context(DbConnection con)
  : base(con, false)
{
}

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Configurations.AddFromAssembly(typeof(ZincContext).Assembly);      
    base.OnModelCreating(modelBuilder);
  }
}

public class EntityRepository<T> : IEntityRepository<T> where T : class
{
    protected IDbSet<T> ObjectSet
    {
      get
      {
        if (_objectSet == null)
        {
          _objectSet = this.DbContext.Set<T>();
        }
        return _objectSet;
      }
    }
}
  • 0
    Вы используете AsNoTracking?
  • 0
    Мы не делаем, потому что мы используем отслеживание сущностей для обновлений и отложенной загрузки. Сказав, что мы можем отойти от этого шаблона, так как мне не нравится, что у сущностей по-прежнему есть дескриптор БД для отложенной загрузки, и это будет гарантировать, что мы вызвали метод Update в хранилище для повторного присоединения сущности. Будет ли это иметь существенное влияние на производительность?
Показать ещё 3 комментария
Теги:
performance
entity-framework

1 ответ

0

Генерирование представлений на основе модели сущности является значительной стоимостью при первом запуске приложения. Используйте утилиту EdmGen.exe для предварительного создания представлений в виде файла кода Visual Basic или С#, который можно добавить в проект во время разработки. Вы также можете использовать Toolkit Transform Toolkit для генерации предварительно скомпилированных представлений. Предварительно созданные представления проверяются во время выполнения, чтобы убедиться, что они соответствуют текущей версии указанной модели сущности. Дополнительные сведения см. В разделе Практическое руководство.

Предварительно создавать представления для повышения производительности запросов (Entity Framework)

Изоляция производительности с предварительно скомпилированными/предварительно созданными представлениями в Entity Framework 4

СТРАНИЦЫ ОБЩЕЙ СТРАНИЦЫ ПЕРВОГО ВИДЕНИЯ ГЕНЕРАЦИИ ШАБЛОНЫ НА ГАЛЕРЕЮ ВИЗУАЛЬНОГО СТУДИОГО КОДА.

  • 0
    Пожалуйста, исправьте меня, если я ошибаюсь, но разве эти опции не требуют, чтобы файл edmx или DbContext были жестко запрограммированы DbSets в реализации DbContext? Мы используем сопоставления с шаблоном IRepository.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню