无法更改连接字符串(ODP,Oracle,Linq to Entities)

时间:2012-10-19 17:37:59

标签: ado.net linq-to-entities odp.net

我有一个App.config连接字符串,可以将我连接到我的数据库:

<add name="SFEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=Oracle.DataAccess.Client;provider connection string=&quot;DATA SOURCE=micahs_poc_dev_server.kci;PASSWORD=kierkegaard;PERSIST SECURITY INFO=True;USER ID=KIERKEGAARD&quot;" 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=&quot;DATA SOURCE=QA_ETL_TEST_SERVER.COM;PASSWORD=bigshotpassword;PERSIST SECURITY INFO=True;USER ID=CoolidgeCalvin&quot;" 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=&quot;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&quot;" providerName="System.Data.EntityClient" />

这基本上反映了我对此服务器的TNS条目。我仍然得到'不存在'错误。

如果我使服务器名称变得愚蠢,我会收到TNS错误,说服务器无法识别。所以我很确定它正在拿起我想要的服务器名称并检查它是否存在。

我不认为这是表权限/创建问题,因为我可以在具有相同凭据(和相同TNS文件)的同一台机器上的两个数据库上查询它们。

[注意:我更改了字符串中的server / user / pw]

[编辑:尝试提起小提琴手,但我没有看到任何消息通过]

1 个答案:

答案 0 :(得分:0)

啊...... VisualStudio丢弃了Model .edmx文件中的模式名称。要使其工作,您必须以某种方式打开模型文件(使用记事本或搜索项目中的所有文档)并手动更改模式名称。 BOO!