我正在使用Visual Studio 2017。Oracle是版本11,但我不确定Oracle的子版本。
我在Oracle中创建了两个新表。我用这个命令授予他们选择、更新、插入和删除:
GRANT DELETE, INSERT, UPDATE, SELECT on "ADMIN"."MYTABLE" to "APP";
所有现有的表都使用至少完全相同的权限,我可以通过实体框架查询它们,直到奶牛回家时没有任何问题。这只是我的新桌子。
我的上下文文件如下:
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);
}
}
我的桌子类看起来像:
[Table("ADMIN.MYTABLE")]
public class MyTable
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("ID", TypeName = "NUMBER")]
public int ID { get; set; }
[Column("Name", TypeName = "VARCHAR2")]
public string Name { get; set; }
}
我有一个地图文件,看起来像这样:
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();
}
我是Oracle的新手。我有SQL Server的背景,但我让其他Oracle专家参与进来,他们也很困惑。
只是为了看看会发生什么,我使用ADO.Net打开了一个连接,并将SQL查询字符串传递给一个命令对象,然后返回一个读取器,我的新表也出现了同样的错误,但是,我可以对数据库中的任何其他表运行select*查询,而不会出现任何问题。
我可以在Oracle的SQL Developer中运行此查询,而不会出现任何问题。
有人知道我可能做错了什么吗。
UPDATE(12/15/2020(:当我创建一个";Net Web应用程序(.Net Framework(";应用我从一个我正在开发的应用程序开始,但后来我创建了一个测试应用程序;Net Web应用程序(.Net Framework(";应用程序和我得到了相同的结果。
A";控制台应用程序(.New Framework(";,然而,这将起作用。早些时候,当我在控制台应用程序中使用它时,我只是认为它可以在任何类型的网络应用程序中工作,但我错了。
我使用从NuGet下载的Oracle.ManagedDataAccess vers 19.10.0应用程序连接到Oracle。最近我下载了Dapper来简化数据访问代码。没关系。使用ADO.net或实体框架可以在控制台应用程序中找到我的表,但在Web应用程序中找不到表。
我相信我找到了问题的答案。我有一个Web.Config和一个包含连接字符串的Web.Debug.Config。Web.Config有一个到生产服务器的连接字符串。Web.Debug.Config有一个到开发服务器的连接字符串。
这只是一个正常的设置。我的问题是Visual Studio无法识别Web.Debug.Config中的转换代码,无法将生产连接字符串替换为开发连接字符串(<connectionStrings xdt:transform='replace'>(
我还没有在生产服务器上创建表,这就是出现错误的原因。