2014-02-20 6 views
4

У меня есть проект MVC4 Web api под visual studio 2012, для которого я хотел бы сначала создать и управлять базой данных, используя EF 6.0.2. На самом деле, решение предполагает четыре проекта, а именно,Код фреймворка сущности сначала не создает таблицы с использованием VS 2012

  • OnlineShop.Application (интерфейс пользователя)
  • OnlineShop.Model посвященный POCO классов только
  • OnlineShop.Test для модульных тестов и
  • OnlineShop.Core имеющие UnitOfWork, GenericRepository и DatabaseContext классы

Каждый из упомянутых проектов включает в себя app.config который содержит такое же соединение, что и в Интернете. конфигурации.

Проблема: После запуска проекта (в режиме отладки) база данных создается, как показано на проводнике сервера (в visual studio 2012). Но у него нет таблиц !!!

Контекст класс базы данных также как:

public class DatabaseContext : DbContext 
{ 
    public DatabaseContext() : base("OnlineShopDb") 
    { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<DatabaseContext, Configuration>()); 
    } 

    //public static void InitializeDatabase() 
    //{ 
    // using (var context = new DatabaseContext()) 
    // { 
    //  context.Database.CreateIfNotExists(); 
    //  Database.SetInitializer(new MigrateDatabaseToLatestVersion<DatabaseContext, Configuration>()); 
    // } 
    //} 

    public DbSet<Person> Persons { get; set; } 
    public DbSet<Customer> Customers { get; set; } 
    public DbSet<User> Users { get; set; } 
    public DbSet<Audit> Audits { get; set; } 
    public DbSet<RoleGroup> RoleGroups { get; set; } 
    public DbSet<Role> Roles { get; set; } 
    public DbSet<UserInRole> UserInRoles { get; set; } 
    public DbSet<Order> Orders { get; set; } 
    public DbSet<OrderDetail> OrderDetails { get; set; } 
    public DbSet<Product> Products { get; set; } 
    public DbSet<ProductCategory> ProductCategories { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
     modelBuilder.Entity<Person>().Map<User>(c => c.Requires("Discriminator").HasValue("User")); 
    } 
} 

Я перемещался в Интернете так много, нашел много статей ANS образцов относительно EF кода первого подхода, но, к сожалению, не может справиться с этой проблемой плохой!

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

+2

вы пытались получить доступ к своему дб с C# код? как db.products.tolist() ?, entityframework строить базу данных, пока вы не попытаетесь получить или установить некоторые данные –

+0

ну .. на самом деле не просто попробовать сейчас, может быть, это помогает .. – Ali

+0

для записи Я отправил свой ответ –

ответ

6

Код Entity Framework сначала не создает вашу базу данных, пока вы не попытаетесь получить к ней доступ, поэтому запустите проект и попробуйте получить или вставить какую-либо запись в вашу базу данных.

Еще один полезный совет: если вы измените свои модели, EF по умолчанию будет вытеснять exeption, и вам придется отказаться от текущей базы данных, чтобы EF мог создать новую.

или я рекомендую вам, чтобы изменить это поведение по умолчанию this way