.net web api在发布时更新模型
所以我正在尝试更新一个模型。以下是如何设置我的模型:.net web api在发布时更新模型,.net,asp.net-mvc-4,asp.net-web-api,wcf-web-api,.net,Asp.net Mvc 4,Asp.net Web Api,Wcf Web Api,所以我正在尝试更新一个模型。以下是如何设置我的模型: public class Event{ public int Id {get;set;} public string Name {get;set;} public DateTime Date {get;set;} public int Organizerid {get;set;} public virtual User Organizer {get;set;} } public class Organizer{ p
public class Event{
public int Id {get;set;}
public string Name {get;set;}
public DateTime Date {get;set;}
public int Organizerid {get;set;}
public virtual User Organizer {get;set;}
}
public class Organizer{
public int Id {get;set;}
public string Name {get;set;}
pubilc virtual iCollection<Event> Events {get;set;}
}
说到这里,我就是这样处理我的推杆的
[HttpPut]
public HttpResponseMessage Put(int eventId, EventVM event)
{
if (ModelState.IsValid && eventId== event.Id)
{
try
{
Event upEvent = dbcontext.Event.FirstOrDefault(e => e.Id == eventId);
upEvent.Name = eventVM.Name;
upEvent.Date = eventVM.Date;
dbcontext.SaveChanges();
return Request.CreateResponse(HttpStatusCode.OK);
}catch(Exception ex){
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
我的问题是它没有保存更新。我想做一个TryUpdateModel,但它似乎不能与WebApi一起使用。救命啊!想法?我假设你知道你正在使用这个方法。。。所以
upEvent.Name=eventVM.Name;
upEvent.Date=eventVM.Date代码>eventVM不存在
祝您好运假设您使用的是实体框架,并且您的示例与实际代码相比可能有点不完整。。这可能是分离实体的问题 尝试添加以下内容:
upEvent.State = EntityState.Modified);
dbcontext.SaveChanges();
dbcontext.SaveChanges()
有关更多信息,请参阅 也许你的代码中有什么地方
context.Configuration.AutoDetectChangesEnabled = false;
修改事件后,若上下文认为属性已修改,也可以检查此项
var nameIsModified = dbcontext.Entry(upEvent).Property(u => u.Name).IsModified;
您也可以强制更新到数据库(虽然我不认为这是解决方案,但它是解决问题的方法,直到您诊断出问题)
将属性标记为已修改会强制在调用SaveChanges时将更新发送到该属性的数据库,即使该属性的当前值与其原始值相同-您正在使用哪个数据库?“icdb.SaveChanges()”我想应该是dbcontext.SaveChanges(),对吗?我的错,我刚刚更改了它。来自另一个项目。你把它放进去了吗?我假设您使用的是实体框架。我认为你的代码在我看来是正确的。。。请确保您可以通过传入的id检索事件是的,我可以获取id为的实例。它似乎没有连接到上下文。问题是您的表单可能正在发布帖子,这在这里已经出现过。请看这里:作为旁注,您为什么不发布模型,或者使用tryupdatemodel,但使用formcollection表单而不是模型tryupdatemodel(formcollection);upEvent不包含状态属性。好的,可以尝试dbcontext.ObjectStateManager.ChangeObjectState(upEvent,EntityState.Modified)
var nameIsModified = dbcontext.Entry(upEvent).Property(u => u.Name).IsModified;
dbcontext.Entry(upEvent).Property(u => u.Name).IsModified = true;