当我尝试使用以下代码从表中检索数据时,我遇到了 Entity Framework 问题:
var firstPerson _deskAssignmentContextBackup.People.First();
我收到的错误消息是:“对象名称‘dbo.People’无效”。
奇怪的是,只有当应用程序作为应用服务部署到 Azure 时,才会出现此错误。当我将完全相同的代码部署到本地 IIS 时,一切都工作得很好。这让我相信问题不在于数据库或 DbContext 配置。
用于此操作的上下文是使用数据库优先方法创建的,确保连接和数据库结构在环境之间完美匹配。
我怀疑可能存在潜在的配置差异或特定于环境的因素导致此行为。
下面是 DbContext 的代码片段:
public class DeskAssignmentContextBackup : DbContext
{
public DeskAssignmentContextBackup()
{
}
public DeskAssignmentContextBackup(DbContextOptions<DeskAssignmentContextBackup> options)
: base(options)
{
}
public virtual DbSet<Person> People { get; set; } = null!;
public virtual DbSet<Supervisor> Supervisors { get; set; } = null!;
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK_dbo.People");
entity.HasIndex(e => e.Id, "IX_Id");
entity.HasIndex(e => e.SupervisorId, "IX_Supervisor_Id");
entity.Property(e => e.EndDate).HasColumnType("datetime");
entity.Property(e => e.SupervisorId).HasColumnName("Supervisor_Id");
entity.HasOne(d => d.Supervisor).WithMany(p => p.People)
.HasForeignKey(d => d.SupervisorId)
.HasConstraintName("FK_dbo.People_dbo.Supervisors_Supervisor_Id");
});
modelBuilder.Entity<Supervisor>(entity =>
{
entity.HasKey(e => e.Id).HasName("PK_dbo.Supervisors");
entity.HasIndex(e => e.Id, "IX_Id");
});
}
}
任何关于如何进一步排查和解决此问题的见解或指导将不胜感激。预先感谢您的帮助!
最佳答案
此错误显然是由于无法找到 dbo.People
表造成的。
如果我理解正确,您正在两个不同的环境中运行数据库查询。第一个是本地的,第二个是 Azure。
因此,如果表 dbo.People
确实存在(请仔细检查),我建议您检查用户是否具有适当的运行查询的权限.
另外,请检查架构和名称,也许有 dbo.People
s 或 public.People
.
关于c# - 对象名称 dbo 表名无效 - Entity Framework 适用于 IIS,但不适用于 Azure 应用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76869177/