Как сгенерировать классы Entity Framework 6.x POCO с сопоставлениями из файла EDMX?

Я в процессе преобразования обширной модели EDMX в классы POCO. Мне нужно перейти от подхода Database First (EDMX с ObjectContext) к чистым подходам First Model (DbContext без EDMX файла). Мне нужно использовать последнюю стабильную версию Entity Framework: 6.1.1.

Я проверил несколько подходов:

  • Добавление элемента генерации кода EF 6.x DbContext Generator, щелкнув правой кнопкой мыши пустое пространство в дизайнере EDMX. Это прекрасно работает, но не добавляет никаких сопоставлений. При таком подходе я все еще должен использовать файл EDMX. Это не полный код в первую очередь.
  • Использование EF 5.x DbContext Fluent Generator для С#. Это вызывает исключение во время разработки. Я не могу его использовать. Я не знаю, связано ли это с тем, что мои инструменты VS Entity Framework уже обновлены до 6.x. Использование альтернативного TT в комментариях, что говорит о том, что он будет работать с EF 6.0, также не помогает.
  • Используя Обратный генератор POCO EntityFramework. Это худшее, потому что он не учитывает переименование каких-либо из моих классов и свойств навигации.
  • Использование Entity Framework Power Tools Beta 4. Опять же, он поддерживает только генерацию из базы данных, а не из файла EDMX.

Мои требования:

  • Мне нужен вход, чтобы быть файлом EDMX, а не базой данных.
  • Мне нужен вывод для полного подхода Code First с Fluent сопоставлениями.
  • Мне нужно, чтобы все имена свойств навигации, определенные в EDMX, рассматривались, потому что иначе он сломал бы большую базу кода, даже больше, чем перенос из ObjectContext в DbContext будет нарушен.

Как вы думаете, что будет хорошим вариантом для меня?

Ответ 1

Ну, я не думаю, что это простое решение для одного клика.

Под файлами edmx. У вас есть еще два файла, кроме xx.Designer.cs и xx.edmx.diagram.. называемых xx.Context.tt и xx.tt, где xx - это имя вашей модели edmx.

Это t4-шаблоны, которые выделяют ваши объекты dbcontext и poco. Все ваши объекты poco будут созданы под вашими файлами xx.tt и dbcontext под вашими файлами xx.Context.tt.

Теперь вам нужно переместить их в отдельные файлы. Это намного проще, если вы используете EF6. и созданный файл уже используют DbContext, а не ObjectContext.

Ответ 2

Я столкнулся с подобным случаем, и я использовал Entities для генератора DTO. Хотя его цель - генерировать DTO, я считаю, что это может помочь кому-то в вашем случае.

https://entitiestodtos.codeplex.com/