在應用程序中,我構建客戶端做的第一件事是請求微風元數據。如果數據庫不存在,並且實體框架需要創建數據庫,則它不會使用使用Database.SetInitializer配置的初始化程序進行播種。微風EFContextProvider元數據()導致數據庫不播種
如果有其他事情觸發EF首先對dbcontext執行查詢,那麼數據庫按預期進行播種。
我不確定這是一個錯誤還是因爲某種原因?
謝謝
在應用程序中,我構建客戶端做的第一件事是請求微風元數據。如果數據庫不存在,並且實體框架需要創建數據庫,則它不會使用使用Database.SetInitializer配置的初始化程序進行播種。微風EFContextProvider元數據()導致數據庫不播種
如果有其他事情觸發EF首先對dbcontext執行查詢,那麼數據庫按預期進行播種。
我不確定這是一個錯誤還是因爲某種原因?
謝謝
我敢肯定,錯誤是在你的最後。我沒有任何問題首先檢索元數據,在這一點上創建和播種數據庫。一直這樣做。
你可以在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; }
}
}
要看到它在行動:
顯示所有文件
刪除*的App_Data/todo.sdf *數據庫
在該構造函數和Web API控制器的方法上設置斷點。
使用調試(F5)運行...您將看到元數據端點首先命中,然後是此靜態構造函數。
查看Windows資源管理器中的* App_Data *文件夾並確認數據庫已創建。
繼續...您會看到Todos查詢終結點命中。
繼續...屏幕填充播種的待辦事項。
你最近怎麼樣?
啊 - 你說得對。經過一番調查,我發現這個問題。我按照你的例子在這裏:http://stackoverflow.com/questions/16275184/how-can-i-tell-breeze-to-completely-ignore-a-property-from-a-code-first-generate忽略屬性。第二個上下文沒有使用適當的初始化器,所以我解決了這個問題。我知道OData使用[IgnoreDataMember]來完成此操作?你們有沒有可能實現這個目標? –