我需要帮助!我不确定标题是否重要,所以我会尝试更好地解释。
我在一个使用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。
感谢阅读,这有点长。我在论坛中找不到我想要的东西并取得了成功的结果,所以我试着自己问一下
桑尼
答案 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)
{
}
}