2014-02-20 79 views
4

我有一個MVC4的Web API項目表的,我想創建並首先使用EF 6.0.2代碼管理數據庫。實際上,解決方案需要四個項目,即實體框架代碼先不要下創建的Visual Studio 2012使用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")); 
    } 
} 

我已經網上衝浪了這麼多,找到了許多關於EF代碼第一種方法的文章ANS樣本但遺憾的是無法處理這個不好的問題!

如果有人能幫助我,我將不勝感激。

+2

你嘗試過用C#代碼訪問你的數據庫?像db.products.tolist()?的EntityFramework建立數據庫,直到你試圖獲取或設置一些數據 –

+0

以及..不是真的只是想現在可能是它幫助.. – Ali

+0

爲我貼我的答案 –

回答

6

實體框架代碼先不創建數據庫,直到您嘗試訪問它,所以運行項目,並嘗試獲取或插入一些記錄到數據庫中。

另一個有用的技巧是,如果你改變你的模型EF默認會拋出一個exeption,你將不得不放棄目前的數據庫,以便EF能箱子一個新的。

或者我建議你更改默認行爲this way

相關問題