0

* Я разрабатываю демо-приложение, используя HotTowel SPA в VS2012. Используя бриз, я пытаюсь разоблачить модель и использовать ее для запроса базы данных. Я использовал ссылку для этого приложения, используя эту ссылку http://www.codeproject.com/Articles/730450/Creating-Single-Page-Application-using-Hot-Towel-TUncaught Error: Нет метаданных, доступных для этого запроса

Вот некоторые из моего кода.

// Мой класс

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 ("database");

// База данных представляет собой метод, определенный в контроллере

// Ошибка Uncaught Ошибка: Там нет метаданных для этого запроса

Эта ошибка наступающем, когда я пытаюсь ориентироваться в на " jobadd "и" jobedit ".

Я попытался изменить некоторые из моего кода, но до сих пор его показывает ту же ошибку

ответ

2

Когда вы ExecuteQueryLocally, ветер должен знать, какой тип сущностей предполагается запросить. Он делает это, сопоставляя строку, указанную в предложении .from, против метаданных объекта. В метаданных каждый объект имеет свойство defaultResourceName, указывающее ожидаемое имя имени ресурса сервера (имя метода на вашем контроллере веб-API), которое используется для запроса этих объектов.

Обычно defaultResourceName это множественное число от имени лица, так что ваш JobDemo объект, вероятно, имеет defaultResourceName из JobDemos. Попробуйте использовать

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 для получения дополнительной информации.

+0

Спасибо, Steve, вот фрагмент кода для карты Entity, я решил проблему выше, но все еще не могу решить Ошибка, которая является ** объектом, не является функцией ** в этой функции function mapToEntity (entity, dto) { для (var prop in dto) { if (dto.hasOwnProperty (prop)) { сущность [prop] (dto [prop]); } } return entity; } где объект - объект с наблюдаемыми, а dto - объект json. – ashishraaj

+0

Почему у вас есть функция mapToEntity? –

Смежные вопросы