Для ясности, OnModelCreating не имеет никакого отношения к тому, создает ли EF базу данных для вас.
Чтобы взаимодействовать с базой данных, Entity Framework должна создать модель объектов, которая будетбыть настойчивым.Если эта модель еще не построена и не кэширована, это событие вызывается.
После того, как модель построена, из нее генерируется хеш, а затем EF пытается подключиться кбазы данных, чтобы узнать, существует ли (a), (b) она содержит информацию о версии, предыдущий хеш, сохраненный в таблице EdmMetadata, и (c) совпадает ли этот хэш с ранее вычисленным из модели.
Если хэши не совпадают, EF использует установленный инициализатор базы данных (вызывая Database.SetInitializer(new SomeInitializerType()
), который может или не может отбрасывать, создавать или иным образом изменять вашу базу данных.Инициализатор по умолчанию, используемый, когда вы не указываете другой, ничего не делает с вашей базой данных, и после его запуска Entity Framework откажется взаимодействовать с базой данных, если она не синхронизирована.
ЕслиВаша база данных не содержит таблицу EdmMetadata с хешем, Entity Framework предполагает, что вы управляете схемой базы данных самостоятельно, и с радостью пытается ее использовать, надеясь, что вы все сделали правильно.Если в будущем схема не будет соответствовать ожиданиям EF, вы получите ошибки при вызове SaveChanges () и т. Д.
Во всех этих сценариях, независимо от того, управляете ли вы своей собственной схемой базы данных илипозволяя EF отбрасывать и воссоздавать его по мере необходимости, независимо от того, синхронизирована ли база данных с вашей моделью или нет, событие OnModelCreating инициирует первый раз, когда Entity Framework должна узнать, что оно сохраняется.