Breeze EFContextProvider Metadata()导致数据库无法播种

时间:2013-12-19 02:23:44

标签: breeze

在应用程序中,我正在构建客户端所做的第一件事就是请求breeze元数据。如果数据库不存在且实体框架需要创建数据库,则不会使用使用Database.SetInitializer配置的初始化程序来播种。

如果其他东西触发EF先对dbcontext进行查询,那么数据库将按预期播种。

我不确定这是一个错误还是出于某种原因?

由于

1 个答案:

答案 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; }
    }
}

要看到它的实际效果:

  1. 显示所有文件

  2. 删除* App_Data / todo.sdf *数据库

  3. 在该构造函数和Web API控制器的方法上设置断点。

  4. 使用debug(F5)运行...您将首先看到元数据端点,然后是静态构造函数。

  5. 查看Windows资源管理器中的* App_Data *文件夹,确认数据库已创建。

  6. 继续...您将看到Todos查询端点命中。

  7. 继续...屏幕上播满播种的待办事项。

  8. 你是怎么做到的?