Простите длину этого вопроса. Я чувствовал, что необходимо включить некоторую подробную информацию о проблеме. Большая часть длины - от снимков экрана. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, которую я не смог предоставить.
У меня есть проект для домашних животных (простое приложение для форума), которое я использую для тестирования всех новейших технологий .NET, и недавно я обошел его с помощью Entity Framework Code-First. Это приложение уже имело существующее решение EF с файлом EDMX, сопоставленным с существующей базой данных, и все мои объекты были автоматически сгенерированы. До сих пор это решение отлично работало.
Примечание. Имейте в виду, что это изменение в EF 4.1 предназначено исключительно для обучения. Если вам интересно, какие мои потребности были вызваны обновлением, их не было. Я просто хотел сделать это для удовольствия.
Я скопировал проект и сделал обновления, поэтому у меня был бы тот же проект, но с различными реализациями Entity Framework. В новом проекте я использовал расширение Visual Studio под названием Entity Framework Power Tools для создания POCOs и DbContext из моей существующей базы данных. Все работало безупречно. У меня было приложение, составляющее примерно 30 минут. Довольно впечатляет.
Однако теперь я заметил, что при запуске приложения выполнение запроса примерно в 3 раза медленнее, чем было раньше. Любая идея, что я мог пропустить?
Ниже приведены детали для обоих решений, а также измерения LINQPad для обоих. (щелкните изображения для полного размера)
Подробности EF 4.0
Ниже приведен снимок моей модели данных EF 4.0. Он отсекает несколько сущностей сверху и снизу, но вы получаете идею.
http://www.codetunnel.com/content/images/EF41question/1.jpg Вот тест LINQPad против моей модели данных EF 4.0.
http://www.codetunnel.com/content/images/EF41question/2.jpg Обратите внимание, что запрос занял 2,743 секунды.
EF 4.1 Детали
Ниже приведен снимок моей модели данных EF 4.1. Поскольку это только код, я покажу класс DbContext, а также один из классов сопоставления (свободный API-код) для одного объекта и самого объекта.
DbContext http://www.codetunnel.com/content/images/EF41question/3.jpg TopicMap (текущая конфигурация API) http://www.codetunnel.com/content/images/EF41question/4.jpg Тема (объект POCO) http://www.codetunnel.com/content/images/EF41question/5.jpg Вот тест LINQPad против моей модели EF 4.1.
http://www.codetunnel.com/content/images/EF41question/6.jpg Обратите внимание, что запрос выполнялся в течение 6,287 секунд, и это был тот же самый запрос. Он занимает более 30 секунд в первый раз, когда он запускается. Если я перейду на вкладки SQL и IL в LINQPad, сгенерированный код SQL и IL идентичны для обеих моделей данных. Это действительно дает мне печаль. В реальном приложении с EF 4.1 все происходит так медленно, что это непригодно.
Я выполнил тот же запрос LINQ для обеих моделей. Запрос захватывает все темы для обычного пользователя форума, заказывает их в порядке убывания по дате последнего ответа (или дата публикации темы, если нет ответов).
Очевидно, я могу просто вернуться к EF 4.0 и пойти по-своему, но мне действительно интересно, может быть, что-то я пропустил. Любая помощь приветствуется.