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)
如何解决这个问题呢?
在这一行:
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()条款之类的东西可能有助于找到您想要的记录。