Entity Framework 4.1 Code First не создает таблицы - PullRequest
10 голосов
/ 31 августа 2011

Я использую EF 4.1 и создал хранилище с использованием DBContext и т. Д. Строка подключения установлена ​​для указания на выпуск SQL Server 2008 R2 Dev.

Когда я запускаю консольное приложение, которое вызывает мой шлюз, который, в свою очередь, добавляет сущность и сохраняет, генерируется исключение, сообщающее, что не может найти таблицу. Когда я смотрю на свою базу данных, создается база данных, но нет таблиц, созданных автоматически, кроме EmdMetadata.

Я что-то упустил?

Mark

Ответы [ 4 ]

8 голосов
/ 31 августа 2011

Чтобы настроить автоматическое удаление и создать, вы должны сделать что-то вроде этого ...

public class MyDbContext : DbContext 
{
    public IDbSet<Foo> Foos { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer(new MyDbContextInitializer());

        base.OnModelCreating(modelBuilder);
    }
}

public class MyDbContextInitializer : DropCreateDatabaseIfModelChanges<MyDbContext>
{
    protected override void Seed(MyDbContext dbContext)
    {
        // seed data

        base.Seed(dbContext);
    }
}
8 голосов
/ 31 августа 2011

Вы можете создавать таблицы самостоятельно - самый простой способ:

IObjectContextAdapter adapter = (IObjectContextAdapter)context;
string script = adapter.ObjectContext.CreateDatabaseScript();
context.Database.ExecuteSqlCommand(script);

Где контекст - это контекст моей базы данных EF 4.1.До этого кода я удаляю все таблицы (с момента последнего создания БД), а после этого я заполняю его данными.

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

Лучше: добавьте инициализатор в статический конструктор, например:

public class MyDbContext : DbContext 
{
    static MyDbContext()
    {
        Database.SetInitializer(new MyDbContextContextInitializer());
    }
}
0 голосов
/ 22 февраля 2012

Вам необходимо добавить это к вашему Application_Start ()

 Database.SetInitializer(new MyDbContextContextInitializer());
 var context = new MyDbContextContext();
 context.Database.Initialize(true);

Последняя строка заставляет БД создать

...