我的应用程序旨在允许用户将即将发生的事件从列表中添加到个人日历中。个人日历被实现为一个表,在所有用户之间共享,该表将一个string UserID值链接到一个int EventID,主键有一个单独的int UserCalendarID。
但是,当调用该操作时,该表没有更新;该操作发布如下:
[HttpPost]
public IActionResult AddToCalendar(int ID)
{
var events = context.Events.ToList();
Event _e = events.FirstOrDefault(x => x.EventID == ID);
var calendars = context.Calendars.ToList();
UserCalendar c = new UserCalendar
{
UserID = userManager.GetUserAsync(HttpContext.User).Result.UserName,
EventID = _e.EventID
};
calendars.Add(c);
context.SaveChanges();
return View("Index");
}作为参考,这是将事件添加到Events表中的(工作)代码:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> NewEvent(Models.NewEventViewModel model, string returnUrl = null)
{
ViewData["ReturnUrl"] = returnUrl;
if (ModelState.IsValid)
{
var newEvent = new Event {
Artist = await userManager.GetUserAsync(HttpContext.User),
EventName = model.EventName,
Time = model.Time,
Venue = model.Venue,
GenreID = model.GenreID
};
var events = context.Events;
events.Add(newEvent);
context.SaveChanges();
ViewBag.Notification = "Your event has been added.";
ViewBag.Color = "Green";
}
else {
ViewBag.Notification = "Something went wrong — Event not added.";
ViewBag.Color = "Red";
}
return View("Index");
}我没有将ViewModel用于AddToCalendar的原因是没有专门针对它的视图;相反,它是由EventDetails页面上的表单中的一个按钮触发的,该按钮的定义如下:
@model Event
@{
ViewData["Title"] = "Event Details";
Event e = ViewBag.Event;
}
<h2>@ViewData["Title"]</h2>
<p><b>Event Name: </b>@e.EventName</p>
<p><b>Artist: </b>@e.Artist.ClientName</p>
<p><b>Date and Time: </b>@e.Time</p>
<p><b>Genre: </b>@e.Genre.GenreName</p>
<p><b>Venue: </b>@e.Venue</p>
@if (ViewBag.isYours)
{
<a asp-action="DeleteEvent" asp-controller="Home" class="btn btn-danger" asp-route-id=@e.EventID>DELETE</a>
<a asp-action="EditEvent" asp-controller="Home" class="btn btn-success" asp-route-id=@e.EventID>EDIT</a>
}
<form asp-action="AddToCalendar" asp-controller="Home" asp-route-id=@e.EventID asp-route-returnurl="@ViewData["ReturnUrl"]">
<input type="submit" value="Add To Your Calendar" class="btn btn-default" />
</form>我已经确认c正在添加到calendars中。为什么AddToCalendar事件不会导致表更新?
发布于 2016-12-19 20:19:18
注意,当您从数据库上下文中获取日历时,您将调用:
var calendars = context.Calendars.ToList();这会将UserCalendar对象的列表加载到内存中。这不跟踪数据库中的实际日历表。当您将事件表添加到事件表时,您将得到如下所示的Events表对象:
var events = context.Events;注意,没有调用"ToList()",这意味着要添加对"Events“的实际上下文对象的引用,而不仅仅是内存中的列表。
如果从调用中删除.ToList()以获取日历,它将跟踪数据库上下文对象,就像在调用中获取Events对象一样。这应该能解决你的问题。
https://stackoverflow.com/questions/41229914
复制相似问题