我正在使用Official Oracle SQL和Entity Framework驱动程序来读取数据库。但是在读取数据库时,它会在表名前加上“dbo”。:
SELECT
*
FROM "dbo"."Woningen"
没有“dbo”。前缀代码工作正常,有,它会导致错误“表或视图不存在”。这可能是因为用户不是'dbo',因此它无权访问该架构。这是我正在使用的实体框架代码:
[Table("Woningen")]
public class Woningen
我已经尝试更新Oracle nuget包但是它出现错误“连接字符串格式不正确”。所以它可能与以前有相同的错误,它只是更快失败。这是我使用的connectionString格式:
<add name="DefaultConnection"
providerName="Oracle.ManagedDataAccess.Client"
connectionString="USER ID=testUser;PASSWORD=password;
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=serverUrl)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=Database)));"/>
我可以看到这个问题的三种可能的解决方案,但不知道如何实现它们:
请注意,当前代码已在生产中使用,因此当前版本应该没问题。数据库及其用户是新的,因此问题可能在于如何创建它们。
答案 0 :(得分:3)
您可以指定Entity Framework使用的架构。见下文
如果您使用的是Entity Framework 6+,则可以使用以下
public class Context : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Set a default schema for ALL tables
modelBuilder.HasDefaultSchema("YourSchemaName");
}
}
如果您希望在特定表格上设置架构......
[Table("Woningen"), Schema = "YourSchemaName")]
public class Woningen { }
如果您使用的是EF5
public class Context : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Unfortunately you have to specify each table you want to set a schema for...
modelBuilder.Entity<Woningen>().ToTable("Woningen", "YourSchemaName");
}
}