在应用程序中,我正在构建客户端所做的第一件事就是请求breeze元数据。如果数据库不存在且实体框架需要创建数据库,则不会使用使用Database.SetInitializer配置的初始化程序来播种。
如果其他东西触发EF先对dbcontext进行查询,那么数据库将按预期播种。
我不确定这是一个错误还是出于某种原因?
由于
答案 0 :(得分: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; }
}
}
要看到它的实际效果:
显示所有文件
删除* App_Data / todo.sdf *数据库
在该构造函数和Web API控制器的方法上设置断点。
使用debug(F5)运行...您将首先看到元数据端点,然后是静态构造函数。
查看Windows资源管理器中的* App_Data *文件夹,确认数据库已创建。
继续...您将看到Todos查询端点命中。
继续...屏幕上播满播种的待办事项。
你是怎么做到的?