I have two identical controller actions and two nearly identical views (one just has a different javscript file with it). One view works just fine, but the other gets hung up on this EF error:
A relationship multiplicity constraint violation occurred: An EntityReference can have no more than one related object, but the query returned more than one related object. This is a non-recoverable error.
I understand the error but it doesn't make any sense in the context, especially when one view works and one doesn't. Here is bit from the two views which is causing it to choke (it's nasty but lets ignore that for now...):
<% var x = ((IEnumerable<Project.Models.Booth>)ViewData["booths"]).Where(b => b.RowNumber == i && b.ColumnNumber == j && b.BoothGroupID == item.ID).FirstOrDefault(); %>
<%if ( x != null)
{ %>
<td class="assigned" title="<%: x.BoothNumber %> - <%: x.Exhibitor.Name %>" style="width:<%: item.Width %>px; height:<%: item.Height %>px;"></td>
<%}
else
{ %>
<td style="width:<%: item.Width %>px; height:<%: item.Height %>px;"></td>
<%} %>
This is the controller action for the details view which causes the exception:
public ActionResult Details(int id)
{
var results = from g in db.BoothGroups
where g.PlanID == id
select g;
ViewData["id"] = id;
var plan = (from p in db.Plans
where p.ID == id
select p).FirstOrDefault();
ViewData["imagePath"] = "/plans/" + plan.Name.ToString().Replace(" ", "").ToLower() + "/" + plan.ImageFileName;
var booths = from b in db.Booths
where b.PlanID == id
select b;
ViewData["booths"] = booths;
return View(results);
}
This is the controller action for the one that works, there is an extra call to populate a drop down list from viewdata, but I removing it doesn't seem to affect one view or the other.
public ActionResult EditAssignment(int id)
{
var results = from g in db.BoothGroups
where g.PlanID == id
select g;
ViewData["id"] = id;
var plan = (from p in db.Plans
where p.ID == id
select p).FirstOrDefault();
ViewData["imagePath"] = "/plans/" + plan.Name.ToString().Replace(" ", "").ToLower() + "/" + plan.ImageFileName;
var exhibitors = from e in db.Exhibitors
where e.MeetingCode == plan.MeetingCode
orderby e.Name
select e;
ViewData["exhibitors"] = new SelectList(exhibitors, "ID", "Name");
var booths = from b in db.Booths
where b.PlanID == id
select b;
ViewData["booths"] = booths;
return View(results);
}
I'm rather stumped by this, any insight is appreciated.