问题描述
我有2个数据库,第一个是 Events ,第二个是 EventParticipants
因此,一旦EventParticipant将新数据添加到数据库中,我想更新 Events 数据库中的当前参与者数量。我尝试放置2个共享相同名称的Controller,即 Join ,但其中一个正在使用[HttpPost]
,另一个正在使用[HttpPut]
,但无法正常工作我试图将它们组合在一起,但是事件数据库中仍然没有任何变化。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Join([Bind(Include = "DateAdded,IC,EventsId")] EventParticipants eventParticipants,[Bind(Include = "Current_Participant")] Events events)
{
if (ModelState.IsValid)
{
db.EventParticipants.Add(eventParticipants);
db.Entry(events).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(eventParticipants);
}
这是视图
@using (Html.BeginForm("Join","JoinEvent",FormMethod.Post,new { Model }))
{
DBContext db = new DBContext();
@Html.AntiForgeryToken()
@Html.HiddenFor(model => model.EventsId)
<input name="DateAdded" type="hidden" value="@DateTime.Now">
<input name="IC" type="hidden" value="@Session["IC"]">
<input name="EventsId" type="hidden" value="@Html.displayFor(model => model.EventsId)">
var plus = Model.Current_Participant + 10;
<input name="Current_Participant" type="text" value="@plus" />
<input type="submit" value="Join Now" class="btn btn-default" />
}
解决方法
您可以这样做,可以使用2个dbcontext指向2个数据库,
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Join([Bind(Include = "DateAdded,IC,EventsId")] EventParticipants eventParticipants,[Bind(Include = "Current_Participant")] Events events)
{
if (ModelState.IsValid)
{
db.EventParticipants.Add(eventParticipants);
db.Entry(events).State = EntityState.Modified;//this should be insert EventParticipants
db.SaveChanges();
dbWithEventsContext.Events.Add(events); //separate dbcontext pointing to Events db
dbWithEventsContext.Entry(events).State = EntityState.Modified;
dbWithEventsContext.SaveChanges();
return RedirectToAction("Index");
}
return View(eventParticipants);
}