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,操作步骤如下:
- 打开Visual Studio的包管理器控制台(路径:Tools → NuGet Package Manager → Package Manager Console)
- 运行以下命令(替换连接字符串和对应数据库的提供程序):
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
相关产品推荐
相关产品推荐

