Ryan Gamal Ответов: 4

Предварительно сгенерированные представления Entity Framework, проблема при сборке с помощью build server


Привет,

Сначала у меня есть модель сущности, построенная с использованием кода EF4.1. Для повышения производительности я предварительно скомпилированный вид, что эф обычно создается во время выполнения. Это прекрасно работает, когда я запускаю локально или публикую на нашем тестовом сервере из visual studio. Однако, когда я строю проект с помощью командной сборки TFS на сервере сборки, я получаю следующее исключение при попытке запросить модель сущности:

Информация о сопоставлении и метаданных для EntityContainer 'X' больше не соответствует информации, используемой для создания предварительно сгенерированных представлений.

Мне было интересно, были ли у кого-то еще подобные проблемы и есть ли способ обойти это. Насколько я знаю, предварительно скомпилированные представления не являются машинными, поэтому проблема вполне может быть связана либо с TFS, либо с msbuild.

Заранее спасибо за любую помощь

Райан

Ryan Gamal

В настоящее время под следствием командой разработчиков в Microsoft...

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/f28eb9da-8e76-46c0-993f-10be01081fed

4 Ответов

Рейтинг:
1

dasblinkenlight

Я бы подумал, что это почти наверняка проблема сборки. Выполнение предварительно скомпилированных представлений требует создания исходных файлов, что традиционно является слабым местом сред сборки.

Три вещи должны произойти в точном порядке, чтобы он работал: (1) артефакты метаданных должны быть скопированы в выходной каталог, (2) edmgen должен забрать их и построить X. Views.cs (или X. Views.vb), и (3) компилятор CS должен построить X. Views.cs, сгенерированный на Шаге 2. Я бы изучил журналы сборки, чтобы увидеть, происходят ли вещи в правильном порядке.

Одна из проблем, которая возникает неоднократно, - это включение сгенерированных артефактов в систему управления версиями. Иногда Плагины делают это за вас, когда вы добавляете сгенерированные источники в свой проект. Если ваш X. Views. cs (или X. Views.vb) был добавлен в систему управления версиями, вам необходимо удалить его.

Еще одна вещь, которую вам нужно проверить, - это то, что исходный каталог, в который записан X. Views.cs, позволяет писать. Это почти полная уверенность в том, что они могут быть записаны на компьютере, где ведется разработка, но ТФС может быть совсем другая история.

Удачи!


Ryan Gamal

Спасибо за информацию. Потому, что я использую в ef4.1 код первого подхода, артефакты метаданных не в том, существует во время компиляции. Вместо того чтобы использовать edmgen в сборке, я использую Visual studio EF power tools для создания предварительно скомпилированного представления, а затем оно добавляется в проект во время разработки.

Таким образом, предварительно скомпилированные представления генерируются только во время разработки и не восстанавливаются при командной сборке.

mbradea

Нашли ли вы какое-либо решение при использовании моделей Code First?

Рейтинг:
1

Member 12886592

Щелкните правой кнопкой мыши на папке проекта, где у вас есть класс DBContext. Затем выберите Entity framework и нажмите кнопку Создать представление. Каждый раз, когда вы создаете новую модель, вам нужно повторять этот процесс


Рейтинг:
0

Member 4393501

У меня та же проблема. Иногда это работает, а иногда нет. Тратить часы времени, пытаясь исправить это.


Рейтинг:
0

BharatSukhwal

Запустите скрипт для генерации обновленного представления

%windir%\Microsoft.NET\Framework\v4.0.30319\EdmGen.exe /nologo /язык:используется CSharp /режим:ViewGeneration "/inssdl:[ваш путь для файлов в Visual студии]\параметр obj\отладки\edmxResourcesToEmbed\ваш_проект.длвэ" "/incsdl:[ваш путь для файлов в Visual студии]\параметр obj\отладки\edmxResourcesToEmbed\ваш_проект.язык csdl" "/inmsl:[ваш путь для файлов в Visual студии]\параметр obj\отладки\edmxResourcesToEmbed\ваш_проект.МСЛ" /outviews:[ваш путь для файлов в Visual студии]\ваш_проект.Вид.в CS