2013-12-19 66 views
0

在應用程序中,我構建客戶端做的第一件事是請求微風元數據。如果數據庫不存在,並且實體框架需要創建數據庫,則它不會使用使用Database.SetInitializer配置的初始化程序進行播種。微風EFContextProvider元數據()導致數據庫不播種

如果有其他事情觸發EF首先對dbcontext執行查詢,那麼數據庫按預期進行播種。

我不確定這是一個錯誤還是因爲某種原因?

謝謝

回答

2

我敢肯定,錯誤是在你的最後。我沒有任何問題首先檢索元數據,在這一點上創建和播種數據庫。一直這樣做。

你可以在Breeze Todo的任何樣品中看到這個。請記住,在處理查詢之前,您的第一個Breeze客戶端查詢總是要求提供元數據,以便第一次調用服務器(在這些示例中)始終是對元數據的請求。如果對元數據的請求無法生成數據庫,則這些示例將不起作用。

Todos示例初始化並在類ctor(靜態ctor)中以微不足道的方式播種數據庫。這裏就是整個TodosContext.cs

namespace Todo.Models { 
    using System.Data.Entity; 

    public class TodosContext : DbContext 
    { 
     // DEVELOPMENT ONLY: initialize the database 
     static TodosContext() 
     { 
      Database.SetInitializer(new TodoDatabaseInitializer()); 
     } 
     public DbSet<TodoItem> Todos { get; set; } 
    } 
} 

要看到它在行動:

  1. 顯示所有文件

  2. 刪除*的App_Data/todo.sdf *數據庫

  3. 在該構造函數和Web API控制器的方法上設置斷點。

  4. 使用調試(F5)運行...您將看到元數據端點首先命中,然後是此靜態構造函數。

  5. 查看Windows資源管理器中的* App_Data *文件夾並確認數據庫已創建。

  6. 繼續...您會看到Todos查詢終結點命中。

  7. 繼續...屏幕填充播種的待辦事項。

你最近怎麼樣?

+0

啊 - 你說得對。經過一番調查,我發現這個問題。我按照你的例子在這裏:http://stackoverflow.com/questions/16275184/how-can-i-tell-breeze-to-completely-ignore-a-property-from-a-code-first-generate忽略屬性。第二個上下文沒有使用適當的初始化器,所以我解決了這個問題。我知道OData使用[IgnoreDataMember]來完成此操作?你們有沒有可能實現這個目標? –