实体框架 - 将动态连接字符串与Oracle Provider

时间:2016-10-24 09:01:21

标签: c# asp.net oracle entity-framework connection-string

我需要帮助!我不确定标题是否重要,所以我会尝试更好地解释。

我在一个使用http请求到ASP.NET web api站点的角度网站上工作。 我的数据库是Oracle数据库。 我使用Entity Framework(Database First)和硬编码连接字符串(在我的web.config中)

<add name="UserConnection" connectionString="DATA SOURCE=ip:port/name;PASSWORD=pwd;PERSIST SECURITY INFO=True;USER ID=usr"
  providerName="Oracle.ManagedDataAccess.Client" />
     

(我用ip替换了真正的信息;端口;名称; pwd; usr,因为我无法显示它们)

所有这一切都有效,但现在我的团队希望能够拥有带有动态USER ID和PASSWORD的Oracle连接字符串

目标是使用一个用户的凭据登录我的角度应用程序,并使用相同的凭据连接到Oracle DB。因此,我不能再使用这个硬编码连接字符串了。 (创建时,用户都在db users表和oracle users表中)

我尝试为我的db:Dbcontext类创建另一个构造函数,给出一个连接字符串:base()第一个参数:

  

public partial class db:DbContext {

     

public db(string connectionString):base(connectionString){}

     

...}

其中connectionString是我web.config中的同一块:&#34; DATA SOURCE = ip:port / name; PASSWORD = pwd; PERSIST SECURITY INFO = True; USER ID = usr&#34;

测试它给了我这个错误:

  

&#34;提供的sqlconnection没有指定初始目录或attachdbfilename oracle&#34;

我认为这不起作用,因为我没有在base first param中提供我的providerName(&#34; Oracle.ManagedDataAccess.Client&#34;),但我没有找到一个构造函数接受providerName的第二个参数。

我也试过这个:

  

public db(string connectionString):base(new OracleConnection(connectionString)){}

但是Visual Studio给了我这个错误:

  

&#34; Erreur CS1503参数1:转换不可能de&#39; Oracle.ManagedDataAccess.Client.OracleConnection&#39; en&#39; System.Data.Entity.Infrastructure.DbCompiledModel&#39; &#34;

我不知道DbCompiledModel是什么,也许它是关键,或者我可能完全错了。

我还尝试编辑web.config连接字符串,更改用户和密码并使用使用此连接字符串的默认db构造函数,但是编辑此文件并不是我想要的:连接字符串仅被编辑db请求完成后,它会重新加载应用程序。

我知道它会超级,我有点失落,我刚刚开始做一些BackEnd应用程序(我实习期间)我以前只做FrontEnd。

感谢阅读,这有点长。我在论坛中找不到我想要的东西并取得了成功的结果,所以我试着自己问一下

桑尼

1 个答案:

答案 0 :(得分:4)

您可以动态设置new OracleConnection,但您还需要将contextOwnsConnection设置为true。这样可以解决您的错误:

  

“Erreur CS1503参数1:转换不可能de'Oracle.ManagedDataAccess.Client.OracleConnection'en'System.Data.Entity.Infrastructure.DbCompiledModel'”

public partial class Entities : DbContext
    {
        public Entities()
            : base(new OracleConnection("DATA SOURCE=Server; PASSWORD=123;USER ID=SYSTEM"), true)
        {

        }
      }