Breeze WebAPI SaveChanges() - недопустимое имя объекта 'dbo.tblAgencyQuery

Я использую Breeze WebAPI для сохранения новой строки в моей базе данных, но когда я пытаюсь вызвать метод SaveChanges(), я получаю сообщение об ошибке "Недопустимое имя объекта" dbo.tblAgencyQuery.

Смотрите мой код ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Breeze.WebApi;
using AgencyUpdate.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace AgencyUpdate.Controllers
{
    [BreezeController]
    public class BreezeController : ApiController
    {

        readonly EFContextProvider<AgencyDbContext> _ContextProvider =
            new EFContextProvider<AgencyDbContext>();

         [HttpGet]
        public string MetaData()
        {
            return _ContextProvider.Metadata();
        }

        [HttpGet]
        public IQueryable<api_Agency> GetAgency()
        {
            return _ContextProvider.Context.api_Agency;
        }

        [HttpPost]
        public void SaveData(JObject data)
        {
            Newtonsoft.Json.Linq.JToken[] agency = data.GetValue("agency").ToArray();
            dynamic DeserializedData = JsonConvert.DeserializeObject(agency[0].ToString());

            //using (var context = new AgencyDbContext())
            //{
            //    tblAgencyQuery AgencyQuery = new tblAgencyQuery(); {
            //        AgencyQuery.QueryID = Guid.NewGuid();
            //        AgencyQuery.QueryText = agency[0].ToString();
            //        AgencyQuery.AgencyID = DeserializedData.agencyID;

            //    };
            //    context.tblAgencyQuery.Add(AgencyQuery);
            //    context.SaveChanges();
            //}

            tblAgencyQuery tblAgencyQuery = new tblAgencyQuery();
            tblAgencyQuery.QueryID = Guid.NewGuid();
            tblAgencyQuery.QueryText = agency[0].ToString();
            tblAgencyQuery.AgencyID = DeserializedData.agencyID;

            _ContextProvider.Context.tblAgencyQuery.Add(tblAgencyQuery);
            _ContextProvider.Context.Entry(tblAgencyQuery).State = System.Data.EntityState.Added;
            _ContextProvider.Context.SaveChanges();

        }


        [HttpGet]
        public IQueryable<api_AgencyOffice> GetOffice()
        {
            return _ContextProvider.Context.api_AgencyOffice;
        }

        [HttpGet]
        public IQueryable<api_AgencyContact> GetContact()
        {
            return _ContextProvider.Context.api_AgencyContact;
        }

    }
}

Я звоню публично void SaveData(данные JObject) из моего JavaScript. Я десериализирую данные и присваиваю значения новому экземпляру tblAgencyQuery. Затем я добавляю его в контекст, чтобы подготовить данные для сохранения.

Но SavedChanges() не любит мой объект. Ожидается ли другой объект?

Это окно исключения

Мой метод JavaScript

 var saveChanges = function (agencyObservable) {

            if (agencyObservable) {
                var data = ko.toJSON(agencyObservable);
                var options = {
                    url: '/breeze/SaveData',
                    type: 'POST',
                    dataType: 'json',
                    data: data,
                    contentType: "application/json; charset=utf-8"
                }

                return $.ajax(options)
                .then(saveSucceeded)
                .fail(saveFailed);

                function saveSucceeded(saveResult) {
                    log('Saved data successfully', saveResult, true);
                };

                function saveFailed(error) {
                    var msg = 'Save failed: ' + error.message;
                    logger.log(msg, error, system.getModuleId(datacontext), true);
                    error.message = msg;
                }
            }
        };

1 ответ

Вы должны вызывать метод EntityManager.saveChanges Бриза. Это подключит к серверу метод SaveChanges, который, в свою очередь, использует метод Breeze ContextProvider.SaveChanges. В своем фрагменте кода вы в основном обходите весь механизм сохранения Breeze. Zip-архив Breeze, доступный на веб-сайте Breeze, содержит ряд примеров, показывающих, как это должно быть сделано.

На клиенте:

myEntityManager.saveChanges().then(saveSucceeded).fail(saveFailed);

На сервере

[HttpPost]
public SaveResult SaveChanges(JObject saveBundle) {
    return ContextProvider.SaveChanges(saveBundle);
}
Другие вопросы по тегам