尝试从数据库获取数据时出现System.InvalidOperationException错误。

7 浏览
0 Comments

尝试从数据库获取数据时出现System.InvalidOperationException错误。

我对MVC和EF还比较新手,我想要将数据库中的数据展示到视图中。这是我的操作代码:

public ActionResult MalfunctionsList(MalfunctionDTO malfunctionDTO)
{
    var malfunctions = _context.Malfunctions.ToList();
    var customer = _context.Malfunctions.Single(c => c.Id == malfunctionDTO.CustomerId);
    var movie = _context.Malfunctions.Where(m => malfunctionDTO.MovieIds.Contains(m.Id)).ToList();
    return View(malfunctions);
}

当代码运行时,我在这行代码中遇到了System.InvalidOperationException: Sequence contains no elements的异常:

var customer = _context.Malfunctions.Single(c => c.Id == malfunctionDTO.CustomerId);

这是我的DTO:

public class MalfunctionDTO
{
    public int CustomerId { get; set; }
    public List MovieIds { get; set; }
    public Customer Customer { get; set; }
    public Movie Movie { get; set; }
    public string ReportDescription { get; set; }
}

在我的数据库表中,customerId不是空的。

0
0 Comments

在获取数据库中的数据时,出现了System.InvalidOperationException的错误。这个错误的原因是使用了Single(condition)方法,它是一个linq扩展方法,用于返回满足条件的唯一一个元素。如果没有满足条件的元素,或者有多个满足条件的元素,它会抛出错误。

在这个案例中,数据库中没有满足条件的元素。另外,也可能是在使用Single方法之前,Malfunctions列表没有包含任何元素,导致无法迭代。

解决这个问题的方法是可以使用SingleOrDefault()方法,它会返回默认值null,而不是抛出异常。或者,可以检查一下在调用Single方法之前,Malfunctions列表是否为空。

另外,如果列表中有多个满足条件的元素,SingleOrDefault()会返回null值。如果确定只有一个元素满足条件,可以使用First()方法获取第一个元素;如果想获取所有满足条件的元素,可以使用Where()方法。

总结起来,出现这个错误的原因是数据库中没有满足条件的元素,解决方法是使用SingleOrDefault()方法返回默认值null或者检查列表是否为空。另外,需要根据具体情况使用First()或Where()方法来获取满足条件的元素。

0
0 Comments

(System.InvalidOperationException when trying to get data from database)问题的出现原因是在Malfunctions中的某些项目上,该查询没有找到任何元素。

解决方法是将Malfunctions.Single(c => c.Id == malfunctionDTO.CustomerId);改为Malfunctions.SingleOrDefault(c => c.Id == malfunctionDTO.CustomerId);

0