使用亚音速时在运行时更改Oracle架构

使用亚音速时在运行时更改Oracle架构,oracle,subsonic,schema,Oracle,Subsonic,Schema,在我的项目中,我使用Oracle数据库和亚音速DAL。我对亚音速和Oracle模式有一个问题,即: 在开发时,我在Oracle数据库中使用了一个模式DEV,并使用亚音速生成DAL。 之后,当发布给客户时,他在Oracle数据库中使用了一个新的模式测试,并将app.config中的连接字符串更改为连接到Oracle。将出现错误,即“表或视图不存在”。我发现了这个错误,并且看到表的模式仍然是DEV。 我不希望在更改模式后和向客户发布时重新生成DAL。请帮助我。首先,您的架构不应该是DEV。DEV是用

在我的项目中,我使用Oracle数据库和亚音速DAL。我对亚音速和Oracle模式有一个问题,即:

在开发时,我在Oracle数据库中使用了一个模式DEV,并使用亚音速生成DAL。 之后,当发布给客户时,他在Oracle数据库中使用了一个新的模式测试,并将app.config中的连接字符串更改为连接到Oracle。将出现错误,即“表或视图不存在”。我发现了这个错误,并且看到表的模式仍然是DEV。
我不希望在更改模式后和向客户发布时重新生成DAL。请帮助我。

首先,您的架构不应该是DEV。DEV是用户或角色。 您的架构名称应该与数据内容相关(例如帐户或销售)

其次,考虑您或客户是否将决定架构名称。假设你有一种叫做FLINTSTONE的产品。您可以决定模式名称应为FLINTSTONE。但是,您的客户可能希望运行您产品的两个实例(例如一个用于本地销售,另一个用于国际销售),并使用相同的数据库。因此,他们希望FS_LOCAL和FS_INTER作为模式名。那个选项是你们产品的一个特点吗

接下来,决定应用程序是否应作为模式所有者进行连接。不这样做有很好的安全理由。例如,模式所有者具有删除表的权限,这通常是应用程序不做的事情,因此,根据最小权限原则,您的应用程序不应该有权限这样做


一般来说,我会为应用程序推荐一些配置参数作为模式名称,并且在连接到数据库之后,应用程序应该执行“ALTER SESSION SET CURRENT_schema='配置文件是什么'”。应用程序数据库用户需要对应用程序架构中的对象具有适当的插入/更新/删除/选择/执行权限。如果应用程序不能做到这一点,您可以在数据库中设置一个登录触发器。

Gary没有在您自己的计算机上使用DEV作为模式是正确的。在使用Oracle时,我们通常将模式设置为客户机将要命名的模式。但是,这并不能解决您的问题。您需要做的是在Oracle中创建一个全局别名,将say DEV映射到CLIENTSCHEMA。您仍然应该重命名计算机上的架构,但这将允许您的架构与客户端不同