EntityFramework 6.0 CreateDatabaseIfNotExists Код сначала для создания базы данных - программирование
Подтвердить что ты не робот

EntityFramework 6.0 CreateDatabaseIfNotExists Код сначала для создания базы данных

Что я делаю неправильно. У меня есть настройка DbContext пользователя и работа, когда я изначально создавал Code-First с powershell, все это работало нормально.

Я реализовал инициализатор базы данных, как и ожидалось при запуске приложения.

Database.SetInitializer<UserDbContext>(new CreateDatabaseIfNotExists<UserDbContext>());

Просто чтобы проверить, действительно ли он создает базу данных, я фактически сбросил базу данных, и теперь я застрял, база данных не будет создана. Я использую SQL Server 2012, любая идея, что может быть неправильным.

Сообщение об ошибке, которое я получаю,

System.InvalidOperationException: Migrations is enabled for context 'UserDbContext' but the database does not exist or contains no mapped tables. Use Migrations to create the database and its tables, for example by running the 'Update-Database' command from the Package Manager Console.

Я попробовал то же самое из консоли диспетчера пакетов, и он все равно дает мне то же сообщение.

4b9b3361

Ответ 1

Наконец понял решения, не знаю, почему и что. Изменен мой инициализатор базы данных на MigrateDatabaseToLatestVersion вместо CreateDatabaseIfNotExists.

Database.SetInitializer<UserDbContext>(new MigrateDatabaseToLatestVersion<UserDbContext, Configuration>());

Ответ 2

Изменить:  С новым сообщением об ошибке проблема возникает из-за того, что вы включили миграцию и уже выполнили миграцию (возможно, первое создание базы данных), и с тех пор, как вы уронили БД, история миграции была потеряна. Если вы не используете автоматические миграции, вы не можете войти и внести изменения в базу данных самостоятельно и ожидать, что код сначала узнает об этом. Попробуйте отключить миграцию и повторно включить их, чтобы увидеть, удаляет ли это историю миграции.

Вам нужно будет сделать вызов в БД либо как чтение, либо вставку данных для БД, которые изначально будут созданы. Используемый вами код сообщает EF, как обращаться с базой данных, если она не существует, когда она пытается ее найти. Для меня я использую метод, описанный в http://www.codeproject.com/Tips/411288/Ensure-Your-Code-First-DB-is-Always-Initialized