未捕获错误:此查询没有可用的元数据

时间:2015-01-13 05:32:04

标签: visual-studio-2012 breeze single-page-application hottowel

*我正在使用VS2012中的HotTowel SPA开发演示应用程序。使用breeze我试图公开模型并使用它来查询数据库。我使用此链接http://www.codeproject.com/Articles/730450/Creating-Single-Page-Application-using-Hot-Towel-T

使用了此应用程序的参考

以下是我的一些代码。

//我的班级

public class JobDemoClass
    {
        public int Id { get; set; }
        public string JobName { get; set; }
        public string JobDescription { get; set; }      
        public DateTime StartTime { get; set; }

    }

//我的DbContext

public class JobDemoDbContext : DbContext
    {
        public DbSet<JobDemoClass> JobDemo { get; set; }

        public JobDemoDbContext()
            : base("SPAConnection")
        {

            Database.SetInitializer<JobDemoDbContext>(null);
        }
    }

//我的控制器

 [BreezeController]
        public class ScottController : ApiController
        {
            readonly EFContextProvider<JobDemoDbContext > _contextProvider = new EFContextProvider<JobDemoDbContext >();

            [System.Web.Http.HttpGet]
            public string Metadata()
            {

                return _contextProvider.Metadata();
            }

            [System.Web.Http.HttpPost]
            public SaveResult SaveChanges(JObject saveBundle)
            {
                return _contextProvider.SaveChanges(saveBundle);
            }

            [System.Web.Http.HttpGet]
            public IQueryable database()
            {
                return _contextProvider.Context.JobDemo;
            }

// Shell.js中的一些路由

var routes = [

                { route: '', moduleId: 'jobs', title: 'Scheduled Jobs', nav: 1 },               
                { route: 'jobadd', moduleId: 'jobadd', title: 'Add a job', nav: 2 },
                {route:'JobEdit/:id',moduleId: 'jobedit', name : 'Edit Job',  visible: false}];

但是在这里我遇到了一个问题,而使用

manager.ExecuteQueryLocally.from(&#34;数据库&#34);

// database是控制器中定义的方法

//错误 未捕获错误:此查询没有可用的元数据

当我尝试导航到&#34; jobadd&#34;和&#34; jobedit&#34;视图。

我尝试更改了一些代码,但仍显示相同的错误

1 个答案:

答案 0 :(得分:2)

当你ExecuteQueryLocally时,breeze需要知道它应该查询什么类型的实体。它通过将.from子句中指定的字符串与实体元数据进行匹配来实现此目的。在元数据中,每个实体都有一个defaultResourceName属性,指示用于查询这些实体的服务器资源名称的预期名称(Web API控制器上的方法名称)。

通常defaultResourceName是实体名称的复数形式,因此您的JobDemo实体可能具有JobDemos的defaultResourceName。尝试使用

var query = breeze.EntityQuery.from('JobDemos');
var jobDemos = manager.executeQueryLocally(query);

或者:

var query = breeze.EntityQuery.from('database').toType('JobDemo');
var jobDemos = manager.executeQueryLocally(query);

有关详细信息,请参阅Breeze documentation on Querying Locally