繁体   English   中英

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

[英]Change Schema Name at Runtime in data context

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

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

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

但是考虑到该模式的数据库连接是:

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

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

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

如果有人遇到类似问题,我将在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;

建立连接后,还有另一种立即执行命令的方法:通过“运行一次命令”(或“初始化命令”)连接字符串参数设置命令(或多个命令)。 有关更多信息,请参考https://www.devart.com/dotconnect/oracle/docs/?Devart.Data.Oracle~Devart.Data.Oracle.OracleConnection~ConnectionString.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM