无法从ASP.Net核心剃刀页面检索表行

问题描述

我是C#和ASP.Net核心剃须刀页面的新手。我认为这是一个简单的问题,但是许多小时后我仍然无法解决它。

(当前)我正在将我的业务逻辑(例如维护逻辑)放入root / BLL / MaintenanceBLL / Maintenance.cs

试图从Maintenance.cs中读取维护表中的记录。 我得到了错误

CS0030无法将类型“ Club.Models.Maintenance”转换为 'Club.BLL.MaintenanceBLL.Maintenance'

在VS2019中,术语ForEach在代码中用红线标记。 我无法解决错误。任何帮助将不胜感激。

我的代码是:

Namespace Club.BLL.MaintenanceBLL
{
    public class Maintenance
    {
        private readonly Club.Data.ApplicationDbContext _context;

        public Maintenance(Club.Data.ApplicationDbContext context)
        {
            _context = context;
        }
        public Maintenance()
        {
        }
      
        public void DoMaintenance()
        {
            //Parse Maintenance table and action those items
            //where Active=True and ActionDate has passed
           
            var maintenances = _context.Maintenance;
            foreach (Maintenance m in maintenances)
            {
                //do something
            }
        }
    }
}

解决方法

使用var自动检测类似的类型

foreach (var m in maintenances)

foreach (Club.Models.Maintenance m in maintenances)

原因是您必须拥有两个Maintenance类,一个在namespace Club.Models下,另一个在namespace Club.BLL.MaintenanceBLL下。

当您编写Namespace Club.BLL.MaintenanceBLL;时,当前代码位于Maintenance下,它将尝试在当前Maintenance m in maintenances或您拥有的所有namespace下查找namespaceusing ...中提到。

您尚未添加using Club.Models;,因此找不到Club.Models.Maintenance,您的foreach (Maintenance m in maintenances)将被视为Club.BLL.MaintenanceBLL.Maintenance

但是您的_context.Maintenance将是DbSet<Club.Models.Maintenance>,因此当您编写foreach (var m in maintenances)时,它将期望与Club.Models.Maintenance对象一起循环。并且您提到Maintenance,它会被视为Club.BLL.MaintenanceBLL.Maintenance,因此您的编译器将显示错误的red line