Entity Framework - 如何使用Oracle提供程序动态连接字符串

7

我需要帮助!我不确定标题是否足够重要,因此我将尝试更好地解释。

我正在开发一个使用HTTP请求连接到ASP.NET Web API站点的Angular网站。我的数据库是Oracle数据库。我使用Entity Framework(数据库优先)和硬编码的连接字符串(在我的web.config中)。

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

( I replaced real infos with ip;port;name;pwd;usr since I can't show them )

所有这些都可以工作,但现在我的团队希望能够使用动态的USER ID和PASSWORD来连接Oracle数据库。目标是以一个用户的凭据登录我的Angular应用程序,并使用相同的凭据连接Oracle数据库。因此,我不能再使用这个硬编码的连接字符串了(当创建用户时,他们既在数据库用户表中,也在Oracle用户表中)。我尝试为我的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"。
测试它会给我这个错误:"The supplied sqlconnection does not specify an initial catalog or attachdbfilename oracle"。我认为这里不起作用,因为我没有在基本第一个参数中提供我的providerName("Oracle.ManagedDataAccess.Client"),但我没有找到一个接受第二个参数提供程序名称的构造函数。
我还尝试过这个: public db(string connectionString) : base(new OracleConnection(connectionString)) {}
但Visual Studio给了我这个错误:"Erreur CS1503 Argument 1: conversion impossible de 'Oracle.ManagedDataAccess.Client.OracleConnection' en 'System.Data.Entity.Infrastructure.DbCompiledModel'"。我不知道DbCompiledModel是什么,也许这是关键,或者我做得完全错了。
我还尝试编辑web.config连接字符串,更改用户和密码,并使用默认的db构造函数,该函数使用此连接字符串,但编辑此文件不会达到我想要的效果:仅在完成db请求后才编辑连接字符串,并重新加载应用程序。
如果您有任何想法,那就太棒了。我有点迷失了,在实习期间,我刚开始做一些BackEnd应用程序,之前只是做FrontEnd。
谢谢阅读,有点长。我在论坛中没有找到我想要的成功结果,所以我试着自己问。
1个回答

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

" 错误CS1503:参数1:无法将'Oracle.ManagedDataAccess.Client.OracleConnection'转换为'System.Data.Entity.Infrastructure.DbCompiledModel' "

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

        }
      }

非常感谢!这正是我所需要的! - Sonny Jayet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接