Как сначала настроить регистр имен сущностей в 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
инструменты (я их практически не использовал)
Я не уверен в этом.
Одним из изменений является то, что теперь EF не выделяет имена классов из имени таблицы. Например, если имя таблицы - "Аксессуары", ранее класс сущностей был "Аксессуар", теперь это "Аксессуары"!
Что я знаю до сих пор, есть опция при подключении EF к БД. Это делает тот же вывод, что и в более ранних версиях.
Как это: https://dotnetinterviewquestion.files.wordpress.com/2013/10/ut.png