Breeze.js在保存期间获取错误

Breeze.js在保存期间获取错误,breeze,Breeze,保存数据时出现以下错误,Get工作正常。 我正在使用VS2012,创建MVC4WebAPI项目,使用Nuget获取Breeze.js。 在服务器上,我首先使用代码中的DbContext 服务器端代码 [BreezeController] public class CountryController : ApiController { private CountryContext db = new CountryContext(); r

保存数据时出现以下错误,Get工作正常。 我正在使用VS2012,创建MVC4WebAPI项目,使用
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.1

2013年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”文件夹

我怀疑你的项目文件有点糟糕你在努吉地狱而且,