【问题标题】:How do I get Entity Framework to query the right table?如何让实体框架查询正确的表?
【发布时间】:2012-08-23 18:28:51
【问题描述】:

我已经定义了一个类

public class ReportClass
{
    public int ID { get; set; }
    public int ClassIndex { get; set; }
    public string ClassName { get; set; }
    public int CompanyID { get; set; }

}

然后我设置了一个 dbcontext。

public class ReportClassContext : DbContext
{
    public DbSet<ReportClass> ReportClasses { get; set; }
}

当我第一次去获取记录时,运行时告诉我数据库表不存在:我检查,发现我的 DbSet 的名称与表不匹配。我切换了名称以匹配:

public class ReportClassContext : DbContext
{
    public DbSet<ReportClass> ReportClassesRealTable { get; set; }
}

但它仍在查询不存在的表。

我做错了什么?

【问题讨论】:

    标签: c# asp.net-mvc-3 entity-framework


    【解决方案1】:

    像这样使用表格属性:

    [Table("ReportClassesRealTable")]
    public class ReportClass
    {
        public int ID { get; set; }
        public int ClassIndex { get; set; }
        public string ClassName { get; set; }
        public int CompanyID { get; set; }
    
    }
    

    这告诉 EF 你的类的实际表名是什么,否则它会尝试使用你的类名的复数形式。

    【讨论】:

    • 我更新了我的标签,因为我意识到我没有使用实体框架 4。我的编译器在 [Table] 行咳嗽(顺便说一句,那个括号语法叫什么?)。是否有我需要的包含,或者此框架版本不支持?
    • 这是一个属性(仅供参考)。您使用的是什么版本的框架?在 EF4 之前没有代码,所以您必须使用 EDMX?
    • 哦,抱歉,我使用的是 EF4。以为这是在 .Net 3.5 中,但实际上是 4。我正在处理太多项目。那么回到另一个问题:为什么它会在桌边咳嗽?
    • Table 属性是 EntityFramework.dll 中System.Component.DataAnnotations 的一部分。确保你有那个引用和正确的 using 语句。
    • 感谢您的耐心帮助!
    【解决方案2】:

    让它保持原样

    public DbSet<ReportClass> ReportClasses { get; set; }
    

    现在重写 OnMoedlCreateing 方法,告诉 EF 使用 fluent API 将此类映射到不同的表。将该方法添加到您的 DBContext 类中

    public class ReportClassContext : DbContext
    {
        public DbSet<ReportClass> ReportClasses { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
          modelBuilder.Entity<ReportClass>().ToTable("ReportClassesRealTable");
        }
    }
    

    这告诉 EF,当您查询 DbContxt 对象的 ReportClasses 属性时,它将从数据库中的 ReportClassRealTable 表中获取数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多