类型为#System; InvalidOperationException'发生在System.Core.dll中但未在用户代码中处理

时间:2017-01-28 13:00:56

标签: c# asp.net entity-framework list exception

我得到以下结论:

  

类型的异常' System.InvalidOperationException'发生在System.Core.dll中但未在用户代码中处理

     

附加信息:序列不包含元素。

在第

var kategoria = db.Kategorie.Include("Kursy").Where(k => k.NazwaKategorii.ToUpper() == nazwaKategori.ToUpper()).Single();

我的KursyController.cs:

using SklepInternetowy1.DAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;


namespace SklepInternetowy1.Controllers
{
public class KursyController : Controller
{

    private KursyContext db = new KursyContext();

    // GET: Kursy
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Lista(string nazwaKategori)
    {
        var kategoria = db.Kategorie.Include("Kursy").Where(k => k.NazwaKategorii.ToUpper() == nazwaKategori.ToUpper()).Single();
        var kursy = kategoria.Kursy.ToList();

        return View(kursy);
        //return View();
    }
    public ActionResult Szczegoly(string id)
    {
        var kurs = db.Kursy.ToList();
        return View(kurs);
        //return View();
    }

    [ChildActionOnly]
    public ActionResult KetagorieMenu()
    {
        var kategorie = db.Kategorie.ToList();
        return PartialView("_KategorieMenu", kategorie);
    }
}
}

我的Lista.cs

@{
ViewBag.Title = "Lista";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<div id="strona">

@Html.Action("KetagorieMenu")



<img src="../Content/Images/dommaly.png" width="5%" height="5%" />
<a href="link">
    Start > ASP.NET
</a>

@Html.Partial("_KursyList")

我的_KategorieMenu.cshtml:

@model IEnumerable<SklepInternetowy1.Models.Kategoria>
@using SklepInternetowy1.Infrastructure

<tabela>
<wiersz>

    @foreach (var kategoria in Model)
        {
        <komorka>
            <a href="@Url.Action("Lista","Kursy", new { nazwaKategori = kategoria.NazwaKategorii.ToString() })"
               style="background-image: url(@Url.IkonyKategoriiSciezka(kategoria.NazwaPlikuIkony)); ">
                @kategoria.NazwaKategorii
            </a>
        </komorka>
    }
</wiersz>

我的_KursyList.cshtml:

@model IEnumerable<SklepInternetowy1.Models.Kurs>
@using SklepInternetowy1.Infrastructure


<div id="zawartosc">
<tabela>
    <wiersz>
        @foreach (var kurs in Model)
        {

            <komorka>
                <a class="dodajDoKoszykaLink" href="@Url.Action("DodajDoKoszyka","Koszyk",new {id = kurs.KursID})">
                </a>
                @if (kurs.Bestseller)
            {

            }

                <a class="kursSzczegolyLink" href="@Url.Action("Szczegoly","Kursy",new {id =kurs.KursID})">

                    <img class="kurs" src="@Url.ObrazkiSciezka(kurs.NazwaPlikuObrazka)" width="66%" height="66%" />
                    <h1>
                        @kurs.TytulKursu - @kurs.AutorKursu
                    </h1>
                </a>
            </komorka>
        }
    </wiersz>
</tabela>

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

在这一行:

var kategoria = db.Kategorie
                  .Include("Kursy")
                  .Where(k => k.NazwaKategorii.ToUpper() == nazwaKategori.ToUpper())
                  .Single();

您正在调用.Single(),这意味着您断言结果中始终只返回一条记录。该错误告诉您结果中返回没有记录,因此对.Single()的调用失败。

由于结果中不可能返回任何记录,而是使用.SingleOrDefault()并检查null的结果。像这样:

var kategoria = db.Kategorie
                  .Include("Kursy")
                  .Where(k => k.NazwaKategorii.ToUpper() == nazwaKategori.ToUpper())
                  .SingleOrDefault();
if (kategoria == null)
{
    // no record was found.
    // handle that situation in whatever way makes sense for your system.
}

如果还可以返回多个记录,那么您也需要检查它,因为.Single().SingleOrDefault()都会抛出错误多个结果(正如他们的名字所暗示的那样)。 .FirstOrDefault()或其他.Where()子句等内容可能有助于在这种情况下找到您想要的记录。