【发布时间】:2018-02-14 13:44:19
【问题描述】:
我正在使用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)));"/>
我可以看到这个问题的三种可能的解决方案,但不知道如何实现它们:
- 操纵实体框架以从查询中排除架构名称
- 授予我的用户访问架构的权限
- 如果有人知道格式是如何变化的,请更新驱动程序并修复连接字符串格式..
请注意,当前代码已经在生产环境中运行,因此当前版本应该没问题。数据库和它的用户是新的,所以问题可能在于它们是如何创建的。
【问题讨论】:
-
您可以指定要在 EF 中使用的适当架构,如果有帮助? EF6+
modelBuilder.HasDefaultSchema(“your schema name”); -
@DanielShillcock 谢谢,这就是解决方案,使用用户名作为架构名称。如果你把它变成一个答案,我会接受它。
标签: c# database oracle entity-framework entity-framework-6