You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework Core连接数据库报‘Invalid object name 'MyData'’及模型生成咨询

解决EF Core连接数据库时的"Invalid object name 'MyData'"错误

错误原因

EF Core默认会将DbSet<T>的名称作为数据库表名执行查询,但你的数据库表实际名为_tbl_Temp,代码中DbSet<MyData>的名称却是MyData,导致EF Core找不到对应的数据表。

修复方法

方法1:用数据注解指定表名

在MyData实体类上添加[Table]注解,显式关联到目标数据库表:

using System.ComponentModel.DataAnnotations.Schema;

[Table("_tbl_Temp")]
public class MyData
{
    [Key]
    public long COL123 { get; set; }
    public long SID { get; set; }
    public decimal cLen { get; set; }
    public decimal cWid { get; set; } 
    public byte[] Rowversion_1725301256 { get; set; }
}

方法2:用Fluent API配置表映射

在MyDbContext中重写OnModelCreating方法,通过Fluent API指定实体与表的对应关系:

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
    {
    }

    public DbSet<MyData> MyData { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyData>().ToTable("_tbl_Temp");
    }
}

补充:如果Rowversion_1725301256是数据库的rowversion/timestamp类型,建议添加[Timestamp]注解,让EF Core正确识别该字段:

[Timestamp]
public byte[] Rowversion_1725301256 { get; set; }

自动生成正确的实体模型

可以通过EF Core的反向工程功能,直接从现有数据库自动生成实体类和DbContext,操作步骤如下:

  1. 打开Visual Studio的包管理器控制台(路径:Tools → NuGet Package Manager → Package Manager Console)
  2. 运行以下命令(替换连接字符串和对应数据库的提供程序):
Scaffold-DbContext "Server=你的服务器地址;Database=目标数据库名;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
  • 若使用MySQL、PostgreSQL等其他数据库,需将Microsoft.EntityFrameworkCore.SqlServer替换为对应数据库的EF Core提供程序包名
  • -OutputDir Models指定生成文件的存放目录,可根据需求修改

执行命令后,EF Core会自动读取数据库表结构,生成包含正确表名映射、字段类型、主键配置的实体类及对应的DbContext,效果和通过服务器资源管理器查看表数据的逻辑一致。

内容的提问来源于stack exchange,提问作者Rifat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:08:15