最近我开始使用John Papa提供的HotTowel AngularJs BreezeJs模板http://www.johnpapa.net/hot-towel-angular/.
我遇到了一个我无法理解的错误:从服务器获取数据没有问题,但当我尝试调用saveChanges()时,我得到了以下错误:
"消息=‘Newtonsoft.Json.Linq.JObject’不包含‘实体’的定义"
对于这个问题,我找到的最接近的答案是:在1.0.1版本中尝试Breeze.js示例时出现异常,但我没有在我的电脑上安装Telerik Studio。我确实有很多其他Telerik产品,如Fiddle、JustCode和其他产品。我确实在GAC中安装了Newtonsoft dll。据我所知,在使用BreezeJS时可能会导致错误,我想知道处理这些错误的最佳方法是什么-我是从GAC中卸载dll,从而可能破坏使用它的Telerik产品,还是有其他方法可以绕过它。
对于代码本身,我使用实体框架,使用代码优先在Windows Azure上创建数据库。我以John Papa为例设置了一个存储库,并将其与BreezeController连接起来。正如我之前所说,所有的getter都能很好地工作,但当我试图发布一些东西时,我会出错。在下面可以找到完整的错误消息:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException was unhandled by user code
HResult=-2146233088
Message='Newtonsoft.Json.Linq.JObject' does not contain a definition for 'entities'
Source=Anonymously Hosted DynamicMethods Assembly
StackTrace:
at CallSite.Target(Closure , CallSite , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site,T0 arg0)
at Breeze.ContextProvider.ContextProvider.SaveChanges(JObject saveBundle, TransactionSettings transactionSettings)
at CC.Dal.StudentHubRepository.SaveChanges(JObject saveBundle) in c:UsersGeorgiDocumentsVisual Studio 2012ProjectsLearningAngular.webCC.DalStudentHubRepository.cs:line 26
at CC.Web.Controllers.BreezeController.SaveChanges(JObject saveBundle) in c:UsersGeorgiDocumentsVisual Studio 2012ProjectsLearningAngular.webLearningAngular.webControllersBreezeController.cs:line 27
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
InnerException:
提前感谢您提供的任何信息。作为几年来StackOverflow的日常用户,这是我实际发布的第一个问题,希望它的表述足够清晰。
EDIT:我确实找到了一个解决办法,每次都在windowsazure上发布我的代码,并在那里进行测试。我仍然无法在本地测试,这似乎确实是因为Telerik在GAC中安装了Newtonsoft dll。目前,我的代码至少可以在服务器上运行,但如果有任何解决方案的建议,我可以在本地进行测试,我们将不胜感激。
您的应用程序中Telerik安装的Newtonsoft版本可能与最新VS2013安装的版本不一致。这种情况经常发生。VS2013破坏了许多安装,你可能会落后于Telerik的更新。我建议你和Telerik谈谈他们正在投入GAC的Newtonsoft版本。。。如果这真的是个问题的话。
FWIW,不应该存在这种性质的问题。已知您所描述的堆栈在Azure中可用。