在数据上下文中的运行时更改架构名称

时间:2016-12-08 21:11:53

标签: c# oracle devart dotconnect

所以,我使用dotConnect for Oracle。我使用模板和向导来创建数据库模型(数据库第一种方法)。我们有一个单个应用程序需要引用的多个数据库,不幸的是,包含这些表的模式命名在其他数据库中并不统一。

Designer.cs文件的自动生成的类中,我得到:

[Table(Name = @"FMC_TP.EQUIPMENT")]

但考虑到架构可以是哪个数据库连接:

[Table(Name = @"FMC_DEV.EQUIPMENT"]

有没有办法在运行时更改映射的架构?

3 个答案:

答案 0 :(得分:1)

在Oracle中,您可以调用alter session set current_schema = SCHEMA_NAME语句来设置会话的上下文。然后,您可以不使用模式名称为表添加前缀,但这可能仅在您对所有语句使用相同会话时才有用。

答案 1 :(得分:1)

如果有人有类似的问题,我会扩展Kacper的答案:

在模型文件MyModel.lqml中,我从表名中删除了架构规范:

<Table Name="SCHEMA.TABLE" Member="ModelTableName">

<Table Name="TABLE" Member="ModelTableName">

基本上适用。

在代码中:

MyModelDataContext mycontext = new MyModelDataContext();

mycontext.ExecuteCommand($"ALTER SESSION SET CURRENT_SCHEMA = {Schema}", new object[1]);

然后执行我的查询。

            var rows = from x in mycontext.ModelTableName
                            where x.COLUMN == id
                            select x;

答案 2 :(得分:0)

通过Run Once Command(或Initialization Command)连接字符串参数建立连接后,还可以立即执行命令:set命令(或多个命令)。有关更多信息,请参阅https://www.devart.com/dotconnect/oracle/docs/?Devart.Data.Oracle~Devart.Data.Oracle.OracleConnection~ConnectionString.html