Как предварительно создать представления для повышения производительности запросов

Прежде чем платформа Entity Framework сможет выполнять запросы к концептуальной модели или сохранять изменения в источнике данных, ей необходимо создать набор локальных представлений запросов для доступа к базе данных. Эти представления входят в состав метаданных, кэшируемых для каждого домена приложения. Если создается несколько экземпляров контекстов объекта в одном и том же домене приложения, то представления из кэшированных метаданных используются в них повторно, а не формируются заново. Создание представлений составляет значительную долю общей стоимости выполнения единичного запроса, поэтому платформа Entity Framework позволяет заранее создавать эти представления и включать их в скомпилированный проект. Дополнительные сведения см. в разделе Вопросы производительности (платформа Entity Framework).

Инструмент Генератор модели EDM (EdmGen.exe) помимо формирования и проверки файлов сопоставления и модели платформы Entity Framework позволяет предварительно создавать эти представления. В данном разделе показано, как при помощи программы EdmGen.exe заранее создать представления для модели School и добавить файл представления в проект. Создание модели School на платформе Entity Framework производилось в разделе Краткое руководство. Последняя процедура показывает, как повторно добавить файлы модели и сопоставления в веб-приложение ASP.NET в виде внедренных ресурсов.

Можно также использовать средства преобразования текстовых шаблонов для создания представлений до компиляции. Дополнительные сведения см. в разделе Использование шаблона T4 для создания представлений.

Bb896240.note(ru-ru,VS.100).gifПримечание
В процедурах, описанных в этом разделе, используются события перед построением и после построения в среде Visual Studio, которые не поддерживаются на веб-узлах ASP.NET. Чтобы заранее создать представления, используемые веб-узлом ASP.NET, необходимо создать файл EDMX в отдельной библиотеке классов, выполнить процедуры в How to: Use a Model Defined in a Class Library для проекта библиотеки классов и добавить ссылку на этот проект в проект веб-узла ASP.NET. В качестве альтернативы можно попробовать вместо веб-узла ASP.NET воспользоваться проектом веб-приложения ASP.NET. Это позволить при помощи процедуры, описанной в данном разделе, включить заранее созданные представления в тот же проект, что и веб-приложение ASP.NET.

Предварительно созданные представления во время выполнения будут проверяться на согласованность с текущей версией файлов модели и сопоставления.

В процедурах, описанных в этом разделе, используется модель School. Эту модель можно создать, выполнив рекомендации раздела Краткое руководство (платформа Entity Framework). Если в процессе построения уже созданы файлы модели и сопоставления в выходном каталоге, то первую процедуру можно пропустить.

Создание файлов модели и сопоставления для модели School в выходном каталоге

  1. В обозревателе решений дважды щелкните файл School.edmx.

    Модель School будет отображена в конструкторе сущностей.

  2. В обозревателе моделей выберите модель SchoolModel и замените Обработка артефактов метаданных на Копировать в выходной каталог.

    Это обеспечит создание в выходном каталоге файлов модели и сопоставления.

  3. Постройте решение.

    При этом файлы модели и сопоставления будут созданы в выходном каталоге.

Добавление средств создания представления в проект Visual Basic

  1. В обозревателе решений выберите проект, для которого необходимо задать событие построения.

  2. В меню Проект выберите пункт ** Свойства проекта.

  3. На странице Свойства откройте вкладку Компиляция.

  4. Нажмите кнопку События построения.

  5. В диалоговом окне События построения добавьте следующее событие перед построением (без разрывов строк).

    "%windir%\Microsoft.NET\Framework\v4.0.30319\EdmGen.exe" /nologo /language:VB 
    /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" 
    "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" 
    "/outviews:$(ProjectDir)School.Views.vb"
    
  6. Нажмите кнопку ОК.

  7. Закройте страницу Свойства проекта.

  8. Постройте решение.

    При этом будет создан файл представления School.Views.vb.

  9. В Обозревателе решений щелкните файл проекта правой кнопкой мыши и выберите пункт Добавить существующий элемент.

  10. В диалоговом окне Добавление существующего элемента перейдите в корневую папку проекта и выберите файл School.Views.vb.

  11. Нажмите кнопку Добавить.

  12. Постройте решение.

Добавление средств создания представления в проект C#

  1. В обозревателе решений выберите проект, для которого необходимо задать событие построения.

  2. В меню Проект выберите пункт Свойства.

  3. Откройте вкладку События построения.

  4. В окне Командная строка события перед построением добавьте следующее событие перед построением (без разрывов строк).

    "%windir%\Microsoft.NET\Framework\v4.0.30319\EdmGen.exe" /nologo /language:CSharp 
    /mode:ViewGeneration "/inssdl:$(TargetDir)School.ssdl" 
    "/incsdl:$(TargetDir)School.csdl" "/inmsl:$(TargetDir)School.msl" 
    "/outviews:$(ProjectDir)School.Views.cs"
    
  5. Постройте решение.

    При этом будет создан файл представления School.Views.cs.

  6. В Обозревателе решений щелкните файл проекта правой кнопкой мыши и выберите пункт Добавить существующий элемент.

    Откроется диалоговое окно Добавление существующего элемента.

  7. Перейдите в корневую папку проекта и выберите файл School.Views.cs.

  8. Нажмите кнопку Добавить.

  9. Постройте решение.

Повторное добавление файлов модели и сопоставления в проект ASP.NET в качестве внедренных ресурсов

  1. В меню Проект выберите пункт Добавить существующий элемент.

  2. Перейдите в выходной каталог проекта, выберите файл School.csdl и нажмите кнопку ОК.

  3. В обозревателе решений выберите добавленный файл.

  4. В окне Свойства задайте для параметра Действие сборки значение Внедренный ресурс.

  5. Повторите шаги с 1 по 3 для файлов School.ssdl и School.msl.

  6. В окне Обозреватель решений дважды щелкните файл App.config, а затем задайте параметр Metadata в атрибуте connectionString в одном из следующих форматов.

    • Metadata= res://<assemblyFullName>/<resourceName>;

    • Metadata= res://*/<resourceName>;

    • Metadata=res://*;

    Параметр resourceName может включать пространство имен проекта. Дополнительные сведения см. в разделе Строки соединения (платформа Entity Framework).

См. также

Справочник

Генератор модели EDM (EdmGen.exe)

Другие ресурсы

Entity Data Model Tools
Изоляция производительности для представлений до компиляции или до создания в Entity Framework 4.