У меня есть два идентичных действия контроллера и два почти идентичных представления (у одного только есть другой файл javscript с этим). Один вид работает просто отлично, но другой зависает на этой ошибке EF:
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.
Я понимаю ошибку, но она не имеет никакого смысла в контексте, особенно когда один вид работает, а другой нет. Вот немного из двух представлений, которые заставляют его задыхаться (это противно, но давайте пока проигнорируем это ...):
<% 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>
<%} %>
Это действие контроллера для представления сведений, которое вызывает исключение:
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);
}
Это действие контроллера для того, которое работает, есть дополнительный вызов для заполнения выпадающего списка из viewdata, но я удалил его, кажется, не влияет ни на одно представление, ни на другое.
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);
}
Я довольно озадачен этим, любая оценка приветствуется.