Asp.net mvc 4 ASP.NET MVC 4延迟查询执行未从数据库检索数据

Asp.net mvc 4 ASP.NET MVC 4延迟查询执行未从数据库检索数据,asp.net-mvc-4,linq-to-entities,deferred-execution,Asp.net Mvc 4,Linq To Entities,Deferred Execution,我是ASP.NETMVC4的新手。在我的项目中,我在EF中使用了代码优先技术。我想从数据库中检索一些数据,为此我使用了以下代码: List<SelectListItem> ls = new List<SelectListItem>(); var lm = from m in db.BOs //fetch data from database select m; foreach (var temp in lm) {

我是ASP.NETMVC4的新手。在我的项目中,我在EF中使用了代码优先技术。我想从数据库中检索一些数据,为此我使用了以下代码:

    List<SelectListItem> ls = new List<SelectListItem>();
    var lm = from m in db.BOs //fetch data from database
             select m;
    foreach (var temp in lm)
    {
        ls.Add(new SelectListItem() { Text = temp.Name, Value = temp.Id.ToString() });
    }
List ls=new List();
var lm=db.BOs中的m//从数据库中获取数据
选择m;
foreach(变量温度单位:lm)
{
添加(新SelectListItem(){Text=temp.Name,Value=temp.Id.ToString()});
}
但当执行指针在
foreach
内移动时,它会立即从循环中返回,显示
返回ls
计数=0
。代码在运行时并没有给我任何错误,这就是为什么我不知道哪里出了问题


更新:我发现了一些新问题。当我把鼠标指针放在var lm上时;它向我显示了查询,并且
FROM
子句中的查询表名不是我的SQL数据库中的那个。我的SQL表名是
BO
,在查询中它使用
BOes
。我不知道这个名字是从哪里来的。那么我如何克服这个呢

在DbContext类中编写以下代码:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}

OnModelCreating方法中的modelBuilder.Conventions.Remove语句防止表名被复数化。如果不这样做,生成的表将命名为Students、Courses和Enrollments。相反,表名将是学生、课程和注册。开发人员对表名是否应该是复数形式存在分歧。本教程使用单数形式,但重要的一点是,您可以通过包含或省略这行代码来选择您喜欢的形式。

使用
Table(“BO”)
来装饰
BO
类,以指定表名(属性位于
System.ComponentModel.DataAnnotations.Schema
命名空间中)


检查EF映射并查看表映射到实体BOs的内容。
[Table("BO")]
public partial class BO
{
    ...