Как сначала настроить регистр имен сущностей в EF Core с базой данных

У меня есть существующий EF6 код базы, и я пытаюсь перенести это на EF Core, и у меня есть существующая база данных, которую я не могу стереть / изменить. Поэтому я использую следующую команду, чтобы очистить классы сущностей от моей базы данных

Scaffold-DbContext "MyConnectionString" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Это действительно генерирует DbContext и необходимые объекты. Теперь, похоже, они изменили соглашения об именах (как называть сущности, свойства и навигацию). МНОГ и вновь созданные сущности очень отличаются от моих существующих сущностей! Я не мог найти способ настроить эти соглашения, поэтому мне приходится вручную изменять код во многих местах! (печальный!)

Одним из изменений является то, что теперь EF не выделяет имена классов из имени таблицы. Например, если имя таблицы - "Аксессуары", ранее класс сущностей был "Аксессуар", теперь это "Аксессуары"!

Чтобы исправить это, я использовал интерфейс IPluralizer и использовал библиотеку Humanizer для Singularize имен классов сущностей.

Когда я использую Humanizer библиотека, это делает

"Accessories".Singularize(); //produces "Accessory"
"XMLDetails".Singularize(); //produces "XMLDetail"

НО, в конечном классе сущности, созданном EF Core второе имя свойства становится Xmldetail игнорируя оригинальный корпус! Есть ли способ сохранить первоначальный корпус в процессе строительных лесов EF Core?

Примечание: я использую Microsoft.EntityFrameworkCore.SqlServer версия 2.0.1 с ориентацией на библиотеку классов .NET Standard 2.0 ,

2 ответа

Решение

После небольшого исследования я узнал от сообщества GitHub, что это известная проблема в EF Core 2.0 и это уже исправлено в репо. Исправление планируется выпустить с EF Core 2.1 ,

После выхода исправления вы можете использовать --use-database-names флаг, чтобы сказать EF генерировать имена точно в соответствии с именами базы данных, как это

Scaffold-DbContext "ConnString" Microsoft.EntityFrameworkCore.SqlServer -o Models --use-database-names

До этого вы можете попробовать один из следующих инструментов, который дает больше / лучше вариантов, чем по умолчанию EF Core инструменты (я их практически не использовал)

  1. Электроинструмент EF Core
  2. https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator

Я не уверен в этом.

Одним из изменений является то, что теперь EF не выделяет имена классов из имени таблицы. Например, если имя таблицы - "Аксессуары", ранее класс сущностей был "Аксессуар", теперь это "Аксессуары"!

Что я знаю до сих пор, есть опция при подключении EF к БД. Это делает тот же вывод, что и в более ранних версиях.

Как это: https://dotnetinterviewquestion.files.wordpress.com/2013/10/ut.png

Другие вопросы по тегам