Неуловена грешка: Няма налични метаданни за тази заявка

*Разработвам демо приложение, използвайки HotTowel SPA във VS2012. С помощта на бриз се опитвам да изложа модела и да го използвам за запитване към базата данни. Използвах справка за това приложение, използвайки тази връзка 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("база данни");

// базата данни е метод, дефиниран в контролера

//Грешка Неуловена грешка: Няма налични метаданни за тази заявка

Тази грешка идва, когато се опитвам да навигирам в изгледа „jobadd“ и „jobedit“.

Опитах се да променя част от кода си, но все още показва същата грешка


person ashishraaj    schedule 13.01.2015    source източник


Отговори (1)


Когато ExecuteQueryLocally, breeze трябва да знае какъв тип обекти трябва да прави заявки. Той прави това чрез съпоставяне на низа, посочен в клаузата .from, спрямо метаданните на обекта. В метаданните всеки обект има свойството defaultResourceName, указващо очакваното име на името на ресурса на сървъра (име на метода на вашия контролер за уеб API), което се използва за запитване на тези обекти.

Обикновено defaultResourceName е множествено число на името на обекта, така че вашият обект JobDemo вероятно има ResourceName по подразбиране JobDemos. Опитайте да използвате

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

Or:

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

Вижте документацията на Breeze за Локални заявки за повече информация.

person Steve Schmitt    schedule 13.01.2015
comment
Благодаря, Стив, Ето част от кода за map to Entity, разреших горния проблем, но все още не мога да реша Грешка, която е обектът не е функция в тази функция function mapToEntity(entity, dto) { for (var prop in dto) {if (dto.hasOwnProperty(prop)) {entity[prop](dto[prop]); } } връщащ обект; } където entity е обект с наблюдаеми, а dto е json обект. - person ashishraaj; 14.01.2015
comment
Защо имате тази функция mapToEntity? - person Steve Schmitt; 14.01.2015