Как сгенерировать классы 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/