2012-10-19 9 views
0

我有我连接到我的数据库只是罚款的App.config的连接字符串:不能更改连接字符串(ODP,甲骨文,LINQ到实体)

<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文件)的同一台计算机上的两个数据库上很好地查询它们。

[注:我改变了服务器/用户在串/ PW]

[编辑:试图造就了小提琴手,但我没有看到任何消息通过]

+1

Oracle说该表不存在。以将为您的linq查询创建的Sql查询并使用ExecuteStoreQuery()运行它。对我来说,这似乎是一个配置问题 - 要么你没有连接到正确的数据库,要么你连接的数据库与工作的数据库不一致。 – Pawel

回答

0

啊...... VisualStudio在Model .edmx文件中取消模式名称。为了使它工作,你必须以某种方式打开模型文件(使用记事本或搜索项目中的所有文档)并手动更改模式名称。嘘!