【发布时间】:2013-10-29 07:15:33
【问题描述】:
保存数据时出现以下错误,Get 工作正常。
我正在使用 VS2012,创建 MVC4 Webapi 项目,使用Nuget 获取Breeze.js。
在服务器上,我使用 Code First 中的 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);
}
}
}
DbContext
public class CountryContext : DbContext
{
public CountryContext() : base("name=CountryContext")
{
}
public DbSet<Country> Countries { get; set; }
}
标题
{
"entities":[
{
"Country_ID":1,
"Country_Code":"USA modified",
"Country_Name":"Unites states hjk",
"entityAspect":{
"entityTypeName":"Country:#LearnKnockout.Models",
"entityState":"Modified",
"originalValuesMap":{
"Country_Name":"Unites states"
},
"autoGeneratedKey":{
"propertyName":"Country_ID",
"autoGeneratedKeyType":"Identity"
}
}
}
],
"saveOptions":{
"allowConcurrentSaves":false
}
}
回应
{
"$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)"
}
【问题讨论】:
-
您是使用代码优先还是数据库优先 EF?如果首先使用数据库,您是在 EFContextProvider
中使用 DbContext 实例还是 ObjectContext 实例? -
你到底想要什么?除了堆栈跟踪之外,您没有问任何问题更多信息会有所帮助...
-
在服务器上,你的 DbContext 或 ObjectContext 是什么样的,你使用的是什么版本的实体框架?
-
-
我发现 Todo 示例中也出现完全相同的错误,我也使用 nuget 下载到示例
标签: breeze