我有一个 App.config 连接字符串,可以很好地将我连接到我的数据库:
<add name="SFEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.DataAccess.Client;provider connection string="DATA SOURCE=micahs_poc_dev_server.kci;PASSWORD=kierkegaard;PERSIST SECURITY INFO=True;USER ID=KIERKEGAARD"" providerName="System.Data.EntityClient" />
我将 ODP 引用与 ADO.NET / Linq to Entities 方法结合使用。
当我想连接到我们网络上的不同数据库(具有相同架构)时,问题就来了。
<add name="SFEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.DataAccess.Client;provider connection string="DATA SOURCE=QA_ETL_TEST_SERVER.COM;PASSWORD=bigshotpassword;PERSIST SECURITY INFO=True;USER ID=CoolidgeCalvin"" providerName="System.Data.EntityClient" />
当我只是更改服务器的名称时,我收到此错误:ORA-00942:表或视图不存在
我实际上可以在它引发异常之前运行几行代码:
using (SFEntities ctx1 = new SFEntities())
{
var ds = ctx1.Connection.DataSource; // debugger: QA_ETL_TEST_SERVER.COM
var db = ctx1.Connection.Database;
var dstate = ctx1.Connection.State;
var dsite = ctx1.Connection.Site;
ctx1.Connection.Open();
SF_CHANGE_ORDER cotest = new SF_CHANGE_ORDER();
cotest.DELETE_FLAG = "D";
var result = (from cp in ctx1.SF_CLIENT_PROJECT
select cp).ToList(); // <--- error here!
我还尝试将格式更改为:
<add name="SFEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.DataAccess.Client;provider connection string="DATA SOURCE=(DESCRIPTION =(ADDRESS=(PROTOCOL=TCP)(HOST=155.32.75.11)(PORT=65550))(ADDRESS=(PROTOCOL=TCP)(HOST=155.32.75.11)(PORT=65550))(CONNECT_DATA=(SERVICE_NAME=QA_ETL_TEST_SERVER.COM)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180)(DELAY=5))));PASSWORD=bigshotpassword;PERSIST SECURITY INFO=True;USER ID=CoolidgeCalvin"" providerName="System.Data.EntityClient" />
这基本上反映了我为此服务器拥有的 TNS 条目。我仍然收到“不存在”错误。
如果我使服务器名称变得愚蠢,我会收到一个 TNS 错误,指出服务器无法识别。所以我很确定它正在获取我想要的服务器名称并检查它是否存在。
我不认为这是一个表权限/创建问题,因为我可以在具有相同凭据(和相同 TNS 文件)的同一台机器上的两个数据库上很好地查询它们。
[注意:我更改了字符串中的服务器/用户/密码]
[编辑:尝试调出提琴手,但我没有看到任何消息通过]