【问题标题】:No Data is being returned from SQL Database using DBContext没有使用 DBContext 从 SQL 数据库返回数据
【发布时间】:2021-08-11 01:13:16
【问题描述】:

我正在创建一个使用 Bing 地图和 ASP.Net 绘制路线的系统。我想将路线上停靠点的邮政编码存储在 SQL 数据库中,并使用 MVC 将它们传递给视图。

但是,查询数据库不会返回任何结果,即使已填充数据库。我在代码的各个部分都使用了 Debug.WriteLine,并推断虽然它连接到数据库并查询正确的表,但当我在控制器中初始化 DBContext 时,使用 ToList.Count 显示 0。

我的代码如下:

控制器 - MapController.cs

private StopsDBContext db = new StopsDBContext();

public ActionResult Index()
    {

        Debug.WriteLine("***************************************************************************************");
        Debug.WriteLine("--->" + db.Stops.ToList().Count + "<---"); // this shows 0 
        Debug.WriteLine("***************************************************************************************");

        var Stops = from e in db.Stops
                    select e;

        List<Stop> Model = Stops.ToList();

        return View(Model);

    }

模型 - Stop.cs

public class Stop
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Postcode { get; set; }

    public Stop(int iD, string name, string postcode)
    {
        ID = iD;
        Name = name;
        Postcode = postcode;
    }

    public Stop() {}
}

public class StopLists
{
    public IEnumerable<Stop> StopList { get; set; }
}

public class StopsDBContext : DbContext
{
    public StopsDBContext()
    {
        Database.Log = s => Debug.WriteLine(s); //this shows the sql queries in the console
    }
    public DbSet<Stop> Stops { get; set; }
}

在执行此操作之前,我已将硬编码数据传递到视图中,因此我知道那部分是正确的,并且由于它正在运行查询,它必须连接到数据库,所以我不确定我缺少什么。

提前致谢

编辑:根据 Dai 的建议更新课程

【问题讨论】:

  • 永远不要从控制器动作返回 IEnumerable&lt;T&gt; (因为您的 DbContext 将在视图呈现之前被释放。而在您的情况下,您 正在使用 @ 实现它987654326@,您仍然应该将其输入为List&lt;T&gt;IReadOnlyList&lt;T&gt;,以确保您不会错误地返回“实时”IQueryable&lt;T&gt;。至于为什么列表为空,请使用您的调试器和 SSMS 的事件探查器。事实那 `db.Stops.ToList().Count == 0` 告诉我你的数据库是空的 - 那你为什么期望任何数据被返回?是什么让你认为有任何记录那里?
  • 顺便说一句,实体框架不支持使用主构造函数的不可变实体类型。您需要向Stop 添加一个无参数构造函数。 (另外,我不喜欢 EF 的代码优先方法 - 如果您已经有一个数据库,那么您应该使用 Database first 方法为您生成脚手架实体类,而不是手动编写它们)
  • 感谢您的建议。首先,我现在向Stop 添加了一个空构造函数。其次,我知道数据库有记录这一事实,我在创建它时填充了它,我可以在 SQL Server 对象资源管理器中看到记录。最后,您还需要使用.ToList() 将其填充到List&lt;T&gt; 中吗?抱歉,如果这是一个明显的问题,我对此还是很陌生。
  • 使用您的调试器:在return View(model) 上设置断点并查看db.Database.Connection.ConnectionString 并确保您看起来正确。

标签: c# sql asp.net-mvc bing-maps


【解决方案1】:

我认为你应该这样使用构造函数:

public StopsDBContext() : base("name=Connectionname")

【讨论】:

    【解决方案2】:

    我现在已经解决了这个错误。感谢所有回复您的建议的人。

    原来我的模型和我的表有不同的字段,我没有意识到,所以 DBContext 正在搜索不存在的字段。哎呀。

    【讨论】:

      猜你喜欢
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多