我是MVC 4 ASP.NET 新手。在我的项目中,我在 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() });
}
但是当执行指针在foreach
内移动时,它会立即退出循环,显示return ls
值Count = 0
。代码在运行时不会给我任何错误,这就是为什么我没有找到出错的地方。
更新:我发现了这个问题的新东西。当我将鼠标指针放在var lm
上时;它向我显示查询,并且在FROM
子句中的查询表名称不是我的SQL数据库中的那个。我的 SQL 表名称是 BO
在查询中它占用了BOes
。我不知道这个名字是从哪里来的。那么我是如何克服这个问题的呢?
用Table("BO")
装饰BO
类以指定表名(属性位于System.ComponentModel.DataAnnotations.Schema
命名空间中)
[Table("BO")]
public partial class BO
{
...
在 DbContext 类中编写以下代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
方法中的 modelBuilder.TConvention.Remove 语句可防止表名被复数化。如果不执行此操作,生成的表将命名为"学生"、"课程"和"注册"。相反,表名称将为"学生"、"课程"和"注册"。开发人员对表名是否应复数存在分歧。本教程使用单数形式,但重要的一点是,您可以通过包含或省略此行代码来选择您喜欢的任何形式。