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);
}