Создание кода модели с Model.edmx в EF6 без Visual Studio

c# entity-framework-6 mono monodevelop t4

Вопрос

Для нашего приложения мы не используем Visual Studio в процессе сборки; Visual Studio не находится на серверах сборки. В общем, мы сохранили Visual Studio как «хорошо иметь» для разработки приложения, но важнейшие требования к воспроизводимой сборке - все с открытым исходным кодом / свободно доступны.

Сейчас я рассматриваю возможность перехода на EF6. Я не хочу проверять сгенерированный код модели, поэтому мне нужен способ создания модели из файла edmx без необходимости использования Visual Studio.

Раньше мы использовали EdmGen, поскольку он поставляется с платформой .NET, и мы рады, что наши серверы сборки зависят от этого. В EF6 рекомендуемым способом генерации кода является использование шаблонов T4.

Однако инструменты генерации кода T4 встроены в Visual Studio и не поставляются отдельно.

Этот вопрос содержит часть ответа. Однако есть проблемы с обоими ответами.

Во-первых, предлагается, чтобы лицензия позволяла вам копировать необходимые файлы на сервер сборки из установки Visual Studio. Однако это уродливое решение, так как это означает, что настройка нового сервера сборки не может быть автоматизирована и зависит от присутствия установки Visual Studio. Кроме того, для генерации модели EF6 нам также нужен EF.Utility.CS.ttinclude в установке Visual Studio. У меня есть письмо от одного из разработчиков Microsoft, в котором говорится, что по его неюридическому мнению мне также будет разрешено копировать этот файл, но, глядя на лицензию, я не уверен.

Во-вторых, и гораздо более привлекательно, есть реализация TextTransform с открытым исходным кодом в MonoDevelop. Однако, опять же, нам не хватает файла include, и, кроме того, мне непонятно, что этот инструмент TextTransform работает точно так же и может обрабатывать шаблон, который мне дал EF6. Пока у меня есть ошибки, пытаясь заставить его работать.

Итак: У кого-нибудь есть рабочий пример создания модели EF6 без использования инструментов, которые можно получить только от установки Visual Studio?

Принятый ответ

Теперь у меня это работает. Решение, с которым я закончил, было использование реализации TextTransform с открытым исходным кодом из MonoDevelop. Оказывается, шаблон включает файлы, используемые шаблоном tt, созданным Entity Framework, также доступны под открытой лицензией. Они доступны здесь .

Чтобы заставить его работать с шаблоном, созданным Visual Studio, мне пришлось внести некоторые изменения.

В Model.tt мне пришлось удалить проверку #if PREPROCESSED_TEMPLATE в GetNamespaceName .

Во-вторых, мне пришлось внести небольшие изменения в файл include. Полный измененный файл находится здесь .

Все файлы, которые вам нужно сделать сами, находятся в этом репозитории , хотя обратите внимание, что я не гарантирую, что двоичные файлы TextTransform, которые я включил в него, обновлены - вы, вероятно, должны создать свой собственный / захватить их из MonoDevelop установить. Просто добавьте файл Model.tt и вызовите с помощью:

./TextTransform.exe -out Models.cs -I INCLUDES Model.tt

где «INCLUDES» - это папка с измененным EF.Utility.CS.ttinclude in.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему