Подтвердить что ты не робот

Entity Framework 4 Code First - Предотвращение DB Drop/Create

Я написал приложение ASP.Net MVC 3, используя парадигму Code First, когда при изменении модели модель Entity Framework автоматически пытается воссоздать базовую базу данных SQL Server с помощью операторов DROP и CREATE. Проблема заключается в том, что приложение размещается на стороннем удаленном сервере, который ограничивает количество баз данных, которые я могу иметь, и, похоже, не позволяет мне программно выполнять инструкции "CREATE DATABASE...", как я понял из этого сообщения об ошибке:

Разрешить CREATE DATABASE в базе данных "master".

Есть ли способ остановить удаление Entity Framework и попытку воссоздать всю базу данных, а вместо этого просто удалить таблицы и повторно создать их?

После создания базы данных вручную и запуска приложения я также получаю следующую ошибку, я думаю, поскольку Entity Framework пытается изменить базу данных:

Совместимость модели не может быть проверена, потому что база данных не содержит метаданных модели. Убедитесь, что IncludeMetadataConvention добавлено в соглашения DbModelBuilder.

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: Нашел этот камень через Google, это похоже на то, что вам нужно: http://nuget.org/Tags/IDatabaseInitializer

Вы можете использовать другой инициализатор базы данных. Допустим, ваш контекст называется SampleContext, тогда ваш конструктор будет выглядеть так:

    public SampleContext() 
    {
        System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<SampleContext>()); 
    }

Обратите внимание, что это инициализатор по умолчанию. Возможно, вам понадобится создать собственный пользовательский инициализатор, выполнив IDatabaseInitializer. Здесь есть хорошая информация: http://sankarsan.wordpress.com/2010/10/14/entity-framework-ctp-4-0-database-initialization/

Ответ 2

Используя EF 4.3 с Migrations, вы не получите этого поведения - по крайней мере, я его не видел. Но у меня также есть этот набор в моем коде -

public sealed class DbConfiguration : DbMigrationsConfiguration<DatabaseContext>
{
    public DbConfiguration()
    {
        AutomaticMigrationsEnabled = false;
    }
}