Entity Framework 4 Code First - предотвращение удаления / создания БД - PullRequest
15 голосов
/ 26 мая 2011

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

В базе данных «master» отказано в разрешении CREATE DATABASE.

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

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

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

Ответы [ 2 ]

11 голосов
/ 26 мая 2011

ОБНОВЛЕНИЕ: Нашли этот драгоценный камень через 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/

1 голос
/ 08 марта 2012

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

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