Visual Studio 2012 - Невозможно переместить файлы EF.tt
В VS2012 я заметил, что при создании новой EF-модели (.edmx) DbContext является генерацией кода по умолчанию, а файлы .tt(T4) теперь вложены под.edmx файл в обозревателе решений.
Вопрос: Есть ли способ переместить эти файлы .tt в другую папку или проект? Когда я пытаюсь перетащить в Solution Explorer, это не позволит мне перемещать вложенный файл .tt.
Проблема: Ранее (в VS2010) я использовал для перемещения одного .tt файла для своих POCOs в библиотеку классов, называемую DataDefinitions, и я оставил другой файл .tt для моего контекста в классе библиотека под названием DataAccess. Теперь мне кажется, что я не смогу переместить эти файлы... и разделить свои активы на разные уровни.
В этой статье MSDN, если вы прокрутите страницу вниз, вы увидите изображение того, как файлы .tt теперь вложены...
http://msdn.microsoft.com/en-us/data/jj613116
Ответы
Ответ 1
Это какая-то странная новая функция, в которой шаблоны добавляются в зависимости от файла EDMX. Вы можете исправить это, отредактировав файл .csproj для своего проекта (вы можете сделать это в блокноте или выгрузить проект в VS и отредактировать его). Вы найдете что-то вроде этого:
<None Include="Model.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<DependentUpon>Model.edmx</DependentUpon>
<LastGenOutput>Model.cs</LastGenOutput>
</None>
Вам просто нужно удалить элемент DependentUpon
, и элемент шаблона станет независимой частью проекта.
Ответ 2
Я использую EF5.x DBContext в отдельном проекте для модели данных EF. Несмотря на удаление записи DependentUpon
в файле проекта, как указано в Ladislav и здесь, классы все еще отображались в моем файле Model1.tt.
Чтобы обойти это, мне пришлось также удалить часть записей из файла проекта для каждой из таблиц:
<Compile Include="MyTableName.cs">
<DependentUpon>Model1.tt</DependentUpon>
</Compile>
Только теги с тегами <DependentUpon>
должны быть удалены, в то время как теги <Compile Include="...">
должны храниться. Удаление всей записи приведет к исчезновению файла из списка проектов. Для краткости записи можно сократить до <Compile Include="MyTableName.cs"\>
.
Ответ 3
Вместо редактирования файлов проекта я добавляю в проект модель EF с тем же именем, закрываю решение, копирую файлы модели из другого проекта и снова открываю решение. Я изменяю пространство имен в свойствах edmx и затем перекомпилирую модель.