2014-03-31 73 views
1

我使用WAF(WPF應用程序框架):https://waf.codeplex.com。 我打開BookLibrary項目中的示例。 我有一個名爲Author和它相關的類的模型。WAF(WPF應用程序框架)在這裏添加新的實體表

,這是它的DbContext:..

internal class BookLibraryContext : DbContext 
    { 
     public BookLibraryContext(DbConnection dbConnection) 
      : base(dbConnection, false) 
     { 
      Database.SetInitializer<BookLibraryContext>(null); 
     } 

     public BookLibraryContext() 
      : base(@"Data Source=|DataDirectory|\Resources\BookLibrary2.sdf") 
     { 

     } 

     public bool HasChanges 
     { 
      get 
      { 
       ChangeTracker.DetectChanges(); 

       // It is necessary to ask the ObjectContext if changes could be detected because the 
       // DbContext does not provide the information when a navigation property has changed. 
       return ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Any() 
        || ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Any() 
        || ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Any(); 
      } 
     } 

     private ObjectContext ObjectContext { get { return ((IObjectContextAdapter)this).ObjectContext; } } 


     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 
      modelBuilder.Configurations.Add(new PersonMapping()); 
      modelBuilder.Configurations.Add(new BookMapping()); 
      modelBuilder.Configurations.Add(new AuthorMapping()); 
     } 
    } 

當我運行該項目。發生異常:

{"The specified table does not exist. [ Author ]"} 

如何添加名爲Author的新表?我知道使用Entity Framework遷移或使用工具編輯數據庫結構。

但我看到一個名爲HasChange()的方法。它可能會做一些事情來反映我的數據庫。但我不知道要做到這一點。請幫我

+0

http://stackoverflow.com/questions/2375118/how-to-open-sdf-files您可能需要打開數據庫BookLibrary2.sdf添加表。 – ray

回答

0

您正在使用Database.SetInitializer<BookLibraryContext>(null);導致實體框架做沒有初始化啓動時,這意味着你的數據需要已經滿足你的類。

您可以使用下面的初始化,而不是null

  1. CreateDatabaseIfNotExists。如果不存在,這將創建一個新的數據庫。但是,更改模型不會重新創建數據庫,並且程序會出錯。
  2. DropCreateDatabaseIfModelChanges這將在模型更改時創建新的數據庫,或者在模型保持不變時保留現有數據庫。
  3. DropCreateDatabaseAlways這會在程序每次運行時創建一個新的數據庫。
  4. MigrateDatabaseToLatestVersion這將處理Entity Framework Migrations,以保留數據庫中的數據並根據需要添加或刪除表(也稱爲Data Motion)。

遷移是最難建立的,但從長遠來看最容易維護。但是,對於測試,任何選項都可以。

使用初始化的一個的一個例子是:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BookLibraryContext>());

相關問題