EF Core模型如何映射SQL Server外部表?已遇对象名无效异常
解决EF Core映射SQL Server外部表的问题
问题原因
你用.ToView()映射外部表是错误的——SQL Server外部表属于表对象,不是视图,EF Core会按照视图的逻辑处理,导致找不到对应的对象;另外如果查询时没指定schema,也可能因为上下文默认schema不匹配引发错误。
正确映射与查询方法
修正模型映射代码
用.ToTable()替代.ToView(),并且显式指定schema为dbo(和外部表的schema一致):protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<MyExternalTable>() .ToTable("MyExternalTable", "dbo"); }调整查询代码
- 推荐使用EF Core原生LINQ查询,无需手写SQL,EF会自动生成包含schema的正确语句:
public async Task TryGetBillPayment() { var results = await _dbContext.MyExternalTable.ToListAsync(); } - 如果必须使用
FromSqlRaw,需要显式指定schema(避免因默认schema不匹配找不到表):public async Task TryGetBillPayment() { var results = await _dbContext.MyExternalTable .FromSqlRaw("SELECT * FROM dbo.MyExternalTable") .ToListAsync(); }
- 推荐使用EF Core原生LINQ查询,无需手写SQL,EF会自动生成包含schema的正确语句:
额外检查
- 确认DbContext的连接字符串指向的是创建外部表的那个SQL Server数据库
- 确保连接数据库的账号拥有访问该外部表的权限
内容的提问来源于stack exchange,提问作者Yeasin Abedin
相关产品推荐
相关产品推荐

