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

Son*_*yet 7 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" />
Run Code Online (Sandbox Code Playgroud)

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

所有这些都有效,但现在我的团队希望能够将此Oracle连接字符串与动态USER ID和PASSWORD结合使用

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

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

public partial class db:DbContext {

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

...}

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

测试它给了我这个错误:

"提供的sqlconnection未指定初始目录或attachdbfilename oracle"

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

我也试过这个:

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

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

"Erreur CS1503 Argument 1:转换不可能de'Oracle.ManagedDataAccess.Client.OracleConnection'en'System.Data.Entity.Infrastructure.DbCompiledModel'"

我不知道DbCompiledModel是什么,也许这是关键,或者说我做错了.

我还尝试编辑web.config连接字符串,更改用户和密码并使用使用此连接字符串的默认db构造函数,但编辑此文件不能执行我想要的操作:只有在db请求之后才会编辑连接字符串完了,它重新加载了应用程序.

我知道它会超级,我有点迷失在那里,我刚开始做一些BackEnd应用程序(我正在实习)我之前只做FrontEnd.

感谢阅读,这有点长.我没有在论坛中找到我想要的成功结果,所以我尝试自己询问

桑尼

M. *_*cki 5

You can set dynamically new OracleConnection, but you need also set contextOwnsConnection to true. This resolve your error :

" Erreur CS1503 Argument 1 : conversion impossible 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)
        {

        }
      }
Run Code Online (Sandbox Code Playgroud)