Oracle 只是另一个ORA-00942:表或视图不存在错误消息,但我找不到任何适合我的解决方案

Oracle 只是另一个ORA-00942:表或视图不存在错误消息,但我找不到任何适合我的解决方案,oracle,entity-framework,visual-studio-2017,ado.net,Oracle,Entity Framework,Visual Studio 2017,Ado.net,我正在使用Visual Studio 2017。Oracle是版本11,但我不确定Oracle的子版本 我在Oracle中创建了两个新表。我授权他们使用以下命令选择、更新、插入和删除: GRANT DELETE, INSERT, UPDATE, SELECT on "ADMIN"."MYTABLE" to "APP"; 所有现有的表都至少使用完全相同的特权,我可以通过实体框架查询它们,直到cow返回,没有任何问题。这只是我的新桌子 我

我正在使用Visual Studio 2017。Oracle是版本11,但我不确定Oracle的子版本

我在Oracle中创建了两个新表。我授权他们使用以下命令选择、更新、插入和删除:

GRANT DELETE, INSERT, UPDATE, SELECT on "ADMIN"."MYTABLE" to "APP";
所有现有的表都至少使用完全相同的特权,我可以通过实体框架查询它们,直到cow返回,没有任何问题。这只是我的新桌子

我的上下文文件如下所示:

public class OracleContext : DbContext
{
    public OracleContext() : base("name=OracleConnection") {}

    public DbSet<MyTable> myTable { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("ADMIN");
        modelBuilder.Entity<MyTable>().ToTable("MYTABLE");
        base.OnModelCreating(modelBuilder);
    }
}
public class MyTableMap : IMapper
{
    public void Map(DbModelBuilder builder)
    {
        var en = builder.Entity<MyTable>();

        en.ToTable("ADMIN.MYTABLE");

        en.Property(t => t.ID)
                .HasColumnName("ID")
                .IsRequired();

        en.Property(t => t.NAME)
                .HasColumnName("NAME");
    }
}
using (var context = new OracleContext())
{
    List<MyTable> myTable = context.MyTable.ToList();
}
我有一个如下所示的地图文件:

public class OracleContext : DbContext
{
    public OracleContext() : base("name=OracleConnection") {}

    public DbSet<MyTable> myTable { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("ADMIN");
        modelBuilder.Entity<MyTable>().ToTable("MYTABLE");
        base.OnModelCreating(modelBuilder);
    }
}
public class MyTableMap : IMapper
{
    public void Map(DbModelBuilder builder)
    {
        var en = builder.Entity<MyTable>();

        en.ToTable("ADMIN.MYTABLE");

        en.Property(t => t.ID)
                .HasColumnName("ID")
                .IsRequired();

        en.Property(t => t.NAME)
                .HasColumnName("NAME");
    }
}
using (var context = new OracleContext())
{
    List<MyTable> myTable = context.MyTable.ToList();
}
公共类MyTableMap:IMapper
{
公共void映射(DbModelBuilder生成器)
{
var en=builder.Entity();
en.ToTable(“管理我的表格”);
en.Property(t=>t.ID)
.HasColumnName(“ID”)
.IsRequired();
en.Property(t=>t.NAME)
.姓名(“姓名”);
}
}
我的实体框架代码如下所示:

public class OracleContext : DbContext
{
    public OracleContext() : base("name=OracleConnection") {}

    public DbSet<MyTable> myTable { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("ADMIN");
        modelBuilder.Entity<MyTable>().ToTable("MYTABLE");
        base.OnModelCreating(modelBuilder);
    }
}
public class MyTableMap : IMapper
{
    public void Map(DbModelBuilder builder)
    {
        var en = builder.Entity<MyTable>();

        en.ToTable("ADMIN.MYTABLE");

        en.Property(t => t.ID)
                .HasColumnName("ID")
                .IsRequired();

        en.Property(t => t.NAME)
                .HasColumnName("NAME");
    }
}
using (var context = new OracleContext())
{
    List<MyTable> myTable = context.MyTable.ToList();
}
使用(var context=new OracleContext())
{
List myTable=context.myTable.ToList();
}
我是甲骨文的新手。我有SQL Server的背景,但我邀请了其他Oracle专家的开发人员参与,他们也感到困惑

为了看看会发生什么,我使用ADO.Net打开一个连接,将SQL查询字符串传递给命令对象并返回一个读取器,我的新表也会出现同样的错误,但是,我可以在数据库中的任何其他表上运行select*查询,而不会出现任何问题

我可以在Oracle的SQL Developer中运行此查询,没有任何问题

有人知道我可能做错了什么吗


更新(2020年12月15日):我在创建“ASP.Net Web应用程序(.Net Framework)”应用程序时遇到的问题。我从我正在开发的一个应用程序开始,但后来我创建了一个测试应用程序作为“ASP.Net Web应用程序(.Net Framework)”应用程序,我得到了相同的结果

不过,“控制台应用程序(.New Framework)”可以工作。早些时候,当我让它在控制台应用程序中工作时,我只是假设它可以在任何类型的web应用程序中工作,但我错了


我正在使用从NuGet下载的Oracle.ManagedDataAccess vers 19.10.0应用程序连接到Oracle。最近我下载了Dapper以简化数据访问代码。没关系。使用ADO.net或Entity Framework可以在控制台应用程序中找到我的表,但在Web应用程序中找不到表。

我相信我找到了问题的答案。我有一个Web.Config和一个包含连接字符串的Web.Debug.Config。Config具有到生产服务器的连接字符串。Web.Debug.Config具有到开发服务器的连接字符串

这只是一个正常的设置。我的问题是Visual Studio无法识别Web.Debug.Config中的转换代码,无法将生产连接字符串替换为开发连接字符串(“”)


我没有在生产服务器上创建表,这就是错误的原因。

我相信我找到了问题的答案。我有一个Web.Config和一个包含连接字符串的Web.Debug.Config。Config具有到生产服务器的连接字符串。Web.Debug.Config具有到开发服务器的连接字符串

这只是一个正常的设置。我的问题是Visual Studio无法识别Web.Debug.Config中的转换代码,无法将生产连接字符串替换为开发连接字符串(“”)


我尚未在生产服务器上创建我的表,这就是错误的原因。

您是否可以通过说“Set role None”来签入sql开发人员,并查看您是否仍然能够从表中进行选择,如果不是,则表示select访问权限是通过角色授予的,您可能希望直接而不是通过角色授予select权限。我运行了该命令,select命令仍然返回SQL Developer中表中的所有数据。我注意到,在运行“Set role None”之后,如果单击表名,在Connections窗口中,我收到一条错误消息,说找不到该表。我关闭并重新打开了SQLDeveloper以获得新会话,这样一切都会恢复正常。1) 检查用于连接的数据库用户(请注意,这不是
APP
,因为从您的评论可以明显看出,
APP
角色
.2)检查使用了哪个select语句。(这可以通过一些跟踪参数来完成,如show_sql=true或类似;最好的方法是使用Oracle 10046跟踪)。如果两者都有,则可以在SQL Developer中进行验证,但必须与应用程序用户连接并使用确切的SQL语句。祝你好运在我的示例中,名称已更改。我真的不知道什么是“应用程序”。就像我说的,我不是一个预言家。我是一个SQL Server的家伙。我只知道所有现有表格中的“APP”都是受让人。我使用了一种其他开发人员向我展示的技术。他向OracleContext()类添加了代码,该类将所有SQL消息定向到输出窗口。我从中复制了select语句并将其粘贴到SQL Developer中,它运行良好。您是否可以通过说“Set role None”来签入SQL Developer,并查看您是否仍然能够从表中进行选择,如果不是,则表示select访问权限是通过角色授予的,您可能希望直接而不是通过角色授予select权限。我运行了该命令,select命令仍然返回SQL Developer中表中的所有数据。我注意到,在运行“Set role None”之后,如果单击表名,在Connections窗口中,我收到一条错误消息,说找不到该表。我关闭并重新打开了SQL Developer