在Oracle / ODP.NET中查询USER_OBJECTS时遇到问题

时间:2013-11-08 20:44:38

标签: oracle entity-framework entity-framework-4 plsql odp.net

我正在尝试创建基于USER_OBJECTS的实体框架模型,以便我可以查询软件包的库存和程序。看起来对USER_OBJECTS的调用必须是无模式的,但我无法找到一种方法来配置entity / dbcontext来生成没有模式的语句。

1)是否有一个特殊的模式前缀USER_OBJECTS可以在?

下调用

2)如果没有,那么我如何让实体框架从生成的语句中删除模式前缀?

我发现如果我不提供架构,它默认为正在执行的用户,并且我得到了方便的ORA-00942: table or view does not exist错误。

如果我提供一个空白字符串,则默认为dbo,这对Oracle完全没有帮助。

架构方法的空字符串

Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
   ... CODE TRUNCATED FOR READABILITY ...
   Dim entityConfig = entityMethodGeneric.Invoke(modelBuilder, Nothing)
   Dim toTableMethod = entityConfig.[GetType]().GetMethod("ToTable", New Type() {GetType(String), GetType(String)})

   toTableMethod.Invoke(entityConfig, New Object() {"USER_OBJECTS", ""})

   MyBase.OnModelCreating(modelBuilder)
End Sub

产量

SELECT   "Extent1"."OBJECT_ID" AS "OBJECT_ID"
     ,   "Extent1"."OBJECT_TYPE" AS "OBJECT_TYPE"
     ,   "Extent1"."OBJECT_NAME" AS "OBJECT_NAME"
     ,   "Extent1"."STATUS" AS "STATUS"  

FROM "dbo"."USER_OBJECTS" "Extent1"  

WHERE (("Extent1"."OBJECT_NAME" = :p__linq__0) AND ('PACKAGE' = "Extent1"."OBJECT_TYPE"))

1 个答案:

答案 0 :(得分:0)

显然,您可以针对USER_OBJECTS架构查询SYS,因此我只是将我的实体连接到必要的表格中使用该架构。

SELECT * FROM SYS.USER_OBJECTS