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

Luk*_*asz 0 c# asp.net entity-framework exception list

我得到以下异常:

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

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

在线

var kategoria = db.Kategorie.Include("Kursy").Where(k => k.NazwaKategorii.ToUpper() == nazwaKategori.ToUpper()).Single();
Run Code Online (Sandbox Code Playgroud)

我的 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);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

我的 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")
Run Code Online (Sandbox Code Playgroud)

我的_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>
Run Code Online (Sandbox Code Playgroud)

我的 _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>
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题呢?

Dav*_*vid 6

在这一行:

var kategoria = db.Kategorie
                  .Include("Kursy")
                  .Where(k => k.NazwaKategorii.ToUpper() == nazwaKategori.ToUpper())
                  .Single();
Run Code Online (Sandbox Code Playgroud)

您正在调用.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.
}
Run Code Online (Sandbox Code Playgroud)

如果它也有可能是多个记录可以再回到你需要以检查为好,因为两者.Single().SingleOrDefault()会抛出多个结果错误(如他们的名字所暗示的,真的)。在这种情况下,诸如.FirstOrDefault()或附加.Where()条款之类的东西可能有助于找到您想要的记录。