Reputation: 493
I'm trying to save an Event and EventDetails corresponding to that event.
It's saving the Event and the 1st EventDetail from the loop only.
public class Event
{
[Key]
public int CourseId { get; set; }
..
public virtual ICollection<EventDetail> EventDetails{ get; set; }
}
Controller:
[HttpPost]
public ActionResult Create(Event ev)
{
if (ModelState.IsValid)
{
IQueryable<EventDetail> eventList = ..;
FutureEvents fe = new FutureEvents();
ICollection<FutureEvents> feCol = new Collection<FutureEvents>();
foreach (EventDetail det in eventList)
{
fe.Name = ..;
db.Entry(fe).State = EntityState.Added;
feCol.Add(fe);
}
ev.EventDetails = feCol;
db.Event.Add(ev);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(ev);
}
Upvotes: 0
Views: 37
Reputation: 76814
You have created a single object then modified it in every iteration. Try this out:
[HttpPost]
public ActionResult Create(Event ev)
{
if (ModelState.IsValid)
{
IQueryable<EventDetail> eventList = ..;
ICollection<FutureEvents> feCol = new Collection<FutureEvents>();
foreach (EventDetail det in eventList)
{
FutureEvents fe = new FutureEvents();
fe.Name = ..;
db.Entry(fe).State = EntityState.Added;
feCol.Add(fe);
}
ev.EventDetails = feCol;
db.Event.Add(ev);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(ev);
}
Upvotes: 1
Reputation: 17589
Move
FutureEvents fe = new FutureEvents();
within foreach
loop. You created exactly one FutureEvents
, so one is saved.
Upvotes: 1