*我正在使用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;视图。
我尝试更改了一些代码,但仍显示相同的错误
答案 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。