Breeze.js在保存期间获取错误
保存数据时出现以下错误,Get工作正常。 我正在使用VS2012,创建MVC4WebAPI项目,使用Breeze.js在保存期间获取错误,breeze,Breeze,保存数据时出现以下错误,Get工作正常。 我正在使用VS2012,创建MVC4WebAPI项目,使用Nuget获取Breeze.js。 在服务器上,我首先使用代码中的DbContext 服务器端代码 [BreezeController] public class CountryController : ApiController { private CountryContext db = new CountryContext(); r
Nuget
获取Breeze.js
。
在服务器上,我首先使用代码中的DbContext
服务器端代码
[BreezeController]
public class CountryController : ApiController
{
private CountryContext db = new CountryContext();
readonly EFContextProvider<CountryContext> _contextProvider =
new EFContextProvider<CountryContext>();
// ~/api/todos/Metadata
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
// GET api/Country
public IQueryable<Country> GetCountries()
{
return db.Countries.AsQueryable();
}
// ~/api/todos/SaveChanges
[AcceptVerbs("POST")]
public SaveResult SaveChanges(JObject saveBundle)
{
return _contextProvider.SaveChanges(saveBundle);
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
{
"$id":"1",
"$type":"System.Web.Http.HttpError, System.Web.Http",
"Message":"An error has occurred.",
"ExceptionMessage":"Method not found: 'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'.",
"ExceptionType":"System.MissingMethodException",
"StackTrace":" at Breeze.WebApi.EFContextProvider 1.get_ObjectContext()\r\n at Breeze.WebApi.EFContextProvider 1.ProcessSaves(Dictionary2 saveMap)\r\n at Breeze.WebApi.EFContextProvider 1.SaveChangesCore(Dictionary2 saveMap)\r\n at Breeze.WebApi.ContextProvider.SaveChanges(JObject saveBundle)\r\n at LearnKnockout.Controllers.CountryController.SaveChanges(JObject saveBundle) in c:\\Users\\nssidhu\\Documents\\Visual Studio 2012\\Projects\\CountryWebAPI\\CountryWebAPI\\Controllers\\CountryController.cs:line 43\r\n at lambda_method(Closure , Object , Object[] )\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.b__c(Object instance, Object[] methodParameters)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.<>c__DisplayClass5.b__4()\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func 1 func, CancellationToken cancellationToken)"
}
响应
[BreezeController]
public class CountryController : ApiController
{
private CountryContext db = new CountryContext();
readonly EFContextProvider<CountryContext> _contextProvider =
new EFContextProvider<CountryContext>();
// ~/api/todos/Metadata
[HttpGet]
public string Metadata()
{
return _contextProvider.Metadata();
}
// GET api/Country
public IQueryable<Country> GetCountries()
{
return db.Countries.AsQueryable();
}
// ~/api/todos/SaveChanges
[AcceptVerbs("POST")]
public SaveResult SaveChanges(JObject saveBundle)
{
return _contextProvider.SaveChanges(saveBundle);
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
{
"$id":"1",
"$type":"System.Web.Http.HttpError, System.Web.Http",
"Message":"An error has occurred.",
"ExceptionMessage":"Method not found: 'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'.",
"ExceptionType":"System.MissingMethodException",
"StackTrace":" at Breeze.WebApi.EFContextProvider 1.get_ObjectContext()\r\n at Breeze.WebApi.EFContextProvider 1.ProcessSaves(Dictionary2 saveMap)\r\n at Breeze.WebApi.EFContextProvider 1.SaveChangesCore(Dictionary2 saveMap)\r\n at Breeze.WebApi.ContextProvider.SaveChanges(JObject saveBundle)\r\n at LearnKnockout.Controllers.CountryController.SaveChanges(JObject saveBundle) in c:\\Users\\nssidhu\\Documents\\Visual Studio 2012\\Projects\\CountryWebAPI\\CountryWebAPI\\Controllers\\CountryController.cs:line 43\r\n at lambda_method(Closure , Object , Object[] )\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.b__c(Object instance, Object[] methodParameters)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.<>c__DisplayClass5.b__4()\r\n at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func 1 func, CancellationToken cancellationToken)"
}
{
“$id”:“1”,
“$type”:“System.Web.Http.HttpError,System.Web.Http”,
“消息”:“发生错误。”,
“ExceptionMessage”:“未找到方法:'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IOObjectContextAdapter.get_ObjectContext()'”,
“ExceptionType”:“System.MissingMethodException”,
“StackTrace”:“Breeze.WebApi.EFContextProvider 1.get_ObjectContext()\r\n Breeze.WebApi.EFContextProvider 1.ProcessSaves(Dictionary2 saveMap)\r\n Breeze.WebApi.EFContextProvider 1.SaveChangesCore(Dictionary2 saveMap)\r\n Breeze.WebApi.ContextProvider.SaveChanges(JObject saveBundle)\r\n在c:\\Users\\nssidhu\\Documents\\Visual Studio 2012\\Projects\\CountryWebAPI\\CountryWebAPI\\Controllers\\CountryController.cs中的LearnKnockout.Controllers.CountryController.SaveChanges(JObject saveBundle)处,位于lambda_方法(闭包、对象、对象[])处的第43行\r\n\r\n位于System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c_uuDisplayClass13.b_uC(对象实例,对象[]方法参数)\r\n位于System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(对象实例,对象[]参数)\r\n在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.c_uuDisplayClass5.b_uu4()\r\n在System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func 1 Func,CancellationToken CancellationToken)
}
最新的Nuget Packagee(主要是entity FramewroK的alpha版本)似乎存在问题
我卸载了当前的BreezeNuget包,然后安装了早期版本,一切正常(使用旧版本,我不得不将属性更改为jsonformatter、oDataActionfilter而不是Breezecontroller)
安装软件包Breeze.MVC4WebApi-版本0.78.1最新的Nuget Packagee(主要是entity FramewroK的alpha版本)似乎存在问题 我卸载了当前的BreezeNuget包,然后安装了早期版本,一切正常(使用旧版本,我不得不将属性更改为jsonformatter、oDataActionfilter而不是Breezecontroller) 安装软件包Breeze.MVC4WebApi-版本0.78.12013年10月28日更新: 到目前为止,Breeze 1.4.5支持Microsoft的ASP.NET WebApi 2和Entity Framework 6。请看 旧职位。。。 我们尚未使用实体框架版本6alpha测试Breeze,在它至少达到beta之前,可能不太可能这样做 也就是说,JsonFormatter和ODataActionFilter属性仍然存在于最新版本的breeze中,与BreezeController属性一起存在 2013年10月28日更新: 到目前为止,Breeze 1.4.5支持Microsoft的ASP.NET WebApi 2和Entity Framework 6。请看 旧职位。。。 我们尚未使用实体框架版本6alpha测试Breeze,在它至少达到beta之前,可能不太可能这样做
也就是说,JsonFormatter和ODataActionFilter属性仍然存在于最新版本的breeze中,与BreezeController属性一起存在 由于EF 6.0中的命名空间更改,将引发缺少的方法异常。具体而言: System.Data.Objects.ObjectContext=>System.Data.Entity.Core.Objects.ObjectContext System.Data.EntityState=>System.Data.Entity.EntityState 更多信息:
您可以获取源代码并修改EFContextProvider.cs以使用这些名称空间。由于EF 6.0中的名称空间更改,将引发缺少的方法异常。具体而言: System.Data.Objects.ObjectContext=>System.Data.Entity.Core.Objects.ObjectContext System.Data.EntityState=>System.Data.Entity.EntityState 更多信息:
您可以获取源代码并修改EFContextProvider.cs以使用这些名称空间。我猜您是如何陷入这种混乱的 首先,我打赌您正在使用VisualStudio中的visual“Manage NuGet Packages”对话框 其次,我敢打赌您已经在左上角的组合框中选择了“包括预发行版”。这是我复制你经验的唯一方法。请检查组合框设置,并在这里为我们评论好吗 如果是这样,NuGet将安装EF v.6 alpha(如果EF不在项目中),或者将EF 5升级为EF 6(如果在项目中)<哎哟如果单独升级现有项目的EF包,也可能发生这种情况 我强烈建议每个人都坚持使用“仅稳定””设置,除非你绝对确定你想要一个预发布包;然后请记住将其设置回“仅稳定”,因为组合框设置为“粘性” 是的,我们可以在NuGet包中限制EF版本的上限。。。也许我们会的。坦率地说,管理所有的版本排列是相当困难的,当偏离标准路径时,承担责任是很重要的 我不清楚的是,您是如何获得缺少BreezeControllerAttribute的旧版本的Breeze.WebApi.dll。除了安装Breeze.MVC4WebApiClientSampleNuGet软件包外,您是如何了解[BreezeController]属性的?这是唯一一个可以找到该属性的NuGet包。。。安装(或升级到)该软件包时,应将正确的Breeze.WebApi.dll引用传递到附带的“packages”文件夹 我怀疑你的项目文件有点糟糕你在努吉地狱而且,