С EF Core вы можете использовать один из
context.Database.Migrate()
или
context.Database.EnsureCreated(),
, где context
- DbContext
.
Где вы звоните любой из это зависит от логики c вашего приложения, но в OnConfiguring()
это определенно не то место , поскольку, когда необходимо создать базу данных, EF сначала создает модель и, следовательно, вызывает OnConfiguring()
. Следовательно, вы должны получить сообщение о переполнении стека.
Что касается циклической зависимости, я не могу сказать, но либо компилятор C# слишком умен и переводит возможное переполнение стека в циклическую зависимость (в чем я, честно говоря, сомневаюсь), либо источник ошибка приходит откуда-то еще.
Однако вы должны знать о различиях между Migrate()
и EnsureCreatd()
. Второй не применяет миграции в вашем коде. Вот ответ Роуэн Миллер на похожий вопрос об обоих методах в Github :
Вы бы либо вызвали EnsureCreated (), либо Migrate ( ). EnsureCreated () - это альтернатива, которая полностью пропускает конвейер миграции и просто создает базу данных, соответствующую вашей текущей модели. Это хорошо для модульного тестирования или очень раннего создания прототипов, когда вы просто хотите удалить и заново создать базу данных при изменении модели.
Вы можете просто заменить весь свой код на db. Database.Migrate ();